介绍
- MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
- Druid 是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池。
相关链接
- MyBatis-Plus
- Druid
环境搭建
建立User表```sql DROP TABLE IF EXISTS USER;
CREATE TABLE USER(
ID INTEGER NOT NULL AUTO_INCREMENT COMMENT '自增主键',NAME VARCHAR(64) COMMENT '姓名',PRIMARY KEY (ID)
) COMMENT ‘demo’;
DELETE FROM USER;
INSERT INTO USER(NAME) VALUES (‘AAA’), (‘BBB’), (‘CCC’);
- 新建springboot工程,引入相关依赖```groovy// springboot 相关依赖implementation 'org.springframework.boot:spring-boot-starter-web'// mybatis-plus 依赖implementation 'com.baomidou:mybatis-plus-boot-starter:3.2.0'implementation 'com.baomidou:mybatis-plus-generator:3.2.0'implementation 'org.springframework.boot:spring-boot-starter-freemarker'// druid 依赖implementation 'com.alibaba:druid-spring-boot-starter:1.1.17'// mysql jdbcimplementation 'mysql:mysql-connector-java:5.1.48'// nacosimplementation 'com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:2.1.0.RELEASE'
配置启动参数```yaml server:
port: 8080
spring:
application:# 应用名称name: mybatis-plus-druid-democloud:nacos:discovery:# nacos地址server-addr: 10.0.109.80:8848datasource:# 采用Druid连接池type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/cloud-demo?useUnicode=true&useSSL=false&characterEncoding=utf8username: rootpassword: rootdruid:# 连接池的配置信息# 初始化大小,最小,最大initial-size: 5min-idle: 5maxActive: 20# 配置获取连接等待超时的时间maxWait: 60000# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒timeBetweenEvictionRunsMillis: 60000# 配置一个连接在池中最小生存的时间,单位是毫秒minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1testWhileIdle: truetestOnBorrow: falsetestOnReturn: false# 打开PSCache,并且指定每个连接上PSCache的大小poolPreparedStatements: truemaxPoolPreparedStatementPerConnectionSize: 20# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙filters: stat,wall,slf4j# 通过connectProperties属性来打开mergeSql功能;慢SQL记录connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000# 配置DruidStatFilterweb-stat-filter:enabled: trueurl-pattern: "/*"exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"# 配置DruidStatViewServlet,用于页面监控stat-view-servlet:# 访问druid监控页面的路径url-pattern: "/druid/*"allow: 127.0.0.1login-username: rootlogin-password: rootreset-enable: falseenabled: true
```
编写Mybatis-plus代码生成器,需要先执行sql建立表之后才能根据表生成相应的文件```java @Component public class MybatisGenerator {
@Value(“${spring.datasource.url}”) private String url;
@Value(“${spring.datasource.username}”) private String username;
@Value(“${spring.datasource.password}”) private String password;
public void generateFromTable(String moduleName, String parent, String… tables) { // 代码生成器 AutoGenerator mpg = new AutoGenerator();
// 全局配置 GlobalConfig gc = new GlobalConfig(); String projectPath = System.getProperty(“user.dir”); gc.setOutputDir(projectPath + “/src/main/java”) .setAuthor(“yhy”) .setOpen(false); mpg.setGlobalConfig(gc);
// 数据源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setUrl(url) .setDbType(DbType.MYSQL) .setDriverName(“com.mysql.jdbc.Driver”) .setUsername(username) .setPassword(password); mpg.setDataSource(dsc);
// 包配置 PackageConfig pc = new PackageConfig(); // 生成文件的路径 parent.moduleName pc.setModuleName(moduleName) .setParent(parent); mpg.setPackageInfo(pc);
// 自定义配置 InjectionConfig cfg = new InjectionConfig() { @Override public void initMap() { // to do nothing } };
// 如果模板引擎是 freemarker String templatePath = “/templates/mapper.xml.ftl”;
// 自定义输出配置
List
+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;}
}); cfg.setFileOutConfigList(focList); mpg.setCfg(cfg);
// 配置模板 TemplateConfig templateConfig = new TemplateConfig(); templateConfig.setXml(null); mpg.setTemplate(templateConfig);
// 策略配置 StrategyConfig strategy = new StrategyConfig(); strategy.setNaming(NamingStrategy.underlineto_camel) .setColumnNaming(NamingStrategy.underline_to_camel) .setEntityLombokModel(true) .setRestControllerStyle(true) // 需要生成的表名 .setInclude(tables) .setControllerMappingHyphenStyle(true) .setTablePrefix(pc.getModuleName() + ““) //设置继承关系 .setSuperMapperClass(“kl.v2x.common.mapper.BaseMapper”) .setSuperServiceClass(“kl.v2x.common.service.CrudService”) .setSuperServiceImplClass(“kl.v2x.common.service.impl.CrudServiceImpl”); mpg.setStrategy(strategy);
mpg.setTemplateEngine(new FreemarkerTemplateEngine()); // 执行 mpg.execute(); } }
- 编写测试类,生成所需文件```java@SpringBootTestpublic class GenerateTest {@Autowiredpublic MybatisGenerator mybatisGenerator;@Testpublic void generate() {// 指定生成文件的路径和需要生成的表mybatisGenerator.generateFromTable("kl.pki.cloud","user");}}
- 生成的所有文件如下图

实际开发阶段
指定mapper路径,使用注解
@MapperScan来执行Mapper类的路径```java @EnableDiscoveryClient @MapperScan(“kl.pki.cloud.mapper”) @SpringBootApplication public class MybatisPlusDruidDemoApplication {public static void main(String[] args) {SpringApplication.run(MybatisPlusDruidDemoApplication.class, args);}
} ```
编写Controller测试CRUD,采用Restful的风格,通过body提交表单的方式提交相关数据| A | B | HTTP | URL | 说明 | | —- | —- | —- | —- | —- | | C | create | POST | /user/create | 新增用户 | | R | read | GET | /user/read | 查询单个用户 | | | | GET | /user/list | 查询所有用户 | | U | update | PUT | /user/update | 更新用户 | | D | update | DELETE | /user/delete | 删除用户 |
@RestController@RequestMapping("/user")public class UserController {@Autowiredpublic IUserService userService;@GetMapping(value = "/list")public String getUserList(){List<User> userList=userService.list();return userList.toString();}@PostMapping(value = "/create")public void createUser(String userName){User user = new User();user.setName(userName);userService.save(user);}@GetMapping(value ="/read")public String readUser(int id){return userService.getById(id).toString();}@PutMapping(value = "/update")public void updateUser(int id,String userName){User user = new User();user.setId(id);user.setName(userName);userService.updateById(user);}@DeleteMapping(value = "delete")public void deleteUser(int id){User user = new User();user.setId(id);userService.removeById(id);}}
- 以新增用户为例

- 编写CRUD测试类,参照官方给的例子
官方例子 example link - 访问Druid监控页面
- 编写CRUD测试类,参照官方给的例子
- 启动之后访问 http://localhost:8080/druid
- 用户名/密码 root/root
- 相关配置见配置文件中的
spring.datasource.druid.stat-view-servlet配置项
