介绍
- 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 jdbc
implementation 'mysql:mysql-connector-java:5.1.48'
// nacos
implementation 'com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:2.1.0.RELEASE'
配置启动参数```yaml server:
port: 8080
spring:
application:
# 应用名称
name: mybatis-plus-druid-demo
cloud:
nacos:
discovery:
# nacos地址
server-addr: 10.0.109.80:8848
datasource:
# 采用Druid连接池
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/cloud-demo?useUnicode=true&useSSL=false&characterEncoding=utf8
username: root
password: root
druid:
# 连接池的配置信息
# 初始化大小,最小,最大
initial-size: 5
min-idle: 5
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打开PSCache,并且指定每个连接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,slf4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
# 配置DruidStatFilter
web-stat-filter:
enabled: true
url-pattern: "/*"
exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
# 配置DruidStatViewServlet,用于页面监控
stat-view-servlet:
# 访问druid监控页面的路径
url-pattern: "/druid/*"
allow: 127.0.0.1
login-username: root
login-password: root
reset-enable: false
enabled: 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
@SpringBootTest
public class GenerateTest {
@Autowired
public MybatisGenerator mybatisGenerator;
@Test
public 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 {
@Autowired
public 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
配置项