MyBatis是一个数据库持久层框架,采用ORM架构,映射实体和数据库,对JDBC进行封装,支持定制化SQL、存储过程以及高级映射,使得开发者只需关注SQL语句本身,而不需要处理驱动加载、创建和管理连接等复杂的过程。
MyBatis通过xml或注解的方式将要执行的操作配置起来,并通过Java对象和SQL动态参数映射,生成要执行的SQL语句,MyBatis框架执行后将结果映射为Java对象返回。
MyBatis Plus对MyBatis进一步增强、简化开发和提高效率。本文分享MyBatis Plus和代码生成器的集成方法,并封装一个测试接口。
|
代码文件 |
功能要点 |
|
|
SpringBoot集成MyBatis, MyBatisPlus |
pom.xml |
引入MyBatis和MyBatis Plus依赖:mybatis-spring-boot-starter, mybatis-plus-boot-starter, mybatis-plus-generator |
|
application.yml |
配置数据源 |
|
|
代码生成工具 |
MyBatisPlusGenerator.java |
MyBatis Plus提供了易用高效的代码生成工具,配置路径和包名称。 |
|
生成代码文件 |
entity, mapper, service |
继承基类BaseMapper和IService封装的CRUD功能函数 |
|
单元测试 |
MapperTest.java, ServiceTest.java |
测试CRUD操作 |
|
功能调用 |
CheckController.java |
增加REST接口/chk/db,测试数据库读写功能 |
l 代码
Github下载:https://github.com/jextop/StarterApi/
MyBatis-Plus官网:https://mybatis.plus/guide/
l SpringBoot集成MyBatis和MyBatisPlus
1. 新建SpringBoot项目时,选中MyBatis,将自动添加MyBatis依赖。
2. 在pom.xml中添加MyBatis Plus和Generator依赖。注意运行代码生成工具时,需要一个页面模板库,示例使用freemarker。
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
3. 在application.yml中配置数据源:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/starter?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=UTC
username: root
password: root
l 配置和运行代码生成工具
1. MyBatis Plus提供了一个功能强大的代码生成工具AutoGenerator,在代码中修改文件路径和包名称:MyBatisPlusGenerator.java
2. 运行MyBatisPlusGenerator.main(),生成器可以放在一个独立的项目中。
3. 生成entity, mapper和service,继承基类BaseMapper和IService封装的CRUD功能函数。
l 测试Mapper和Service的功能函数:
@SpringBootTest
public class LogServiceTest {
@Autowired
LogServiceImpl logService;
@Test
public void testSave() {
boolean ret = logService.save(new Log() {{
setSummary(String.format("service: %s", new Date()));
}});
LogUtil.info(ret);
Assertions.assertTrue(ret);
}
@Test
public void testList() {
List<Log> ret = logService.list(new QueryWrapper<Log>()
.orderByDesc("id")
.last(true, "limit 2")
);
ret.forEach(LogUtil::info);
Assertions.assertFalse(ret.isEmpty());
}
}
l 功能调用
1. 增加RestController:CheckController.java
2. 增加REST接口/chk/db,调用mapper读写数据库
@GetMapping(value = "/chk/db")
public Object db(@RequestAttribute(required = false) String ip) {
// Write a log to db
Log log = new Log() {{
setSummary(String.format("db_test_%s_%s_数据库", ip, new Date()));
}};
logMapper.insert(log);
// Read log from db
Log ret = logMapper.selectOne(new QueryWrapper<Log>()
.orderByDesc("id")
.eq("summary", log.getSummary())
);
Integer count = logMapper.selectCount(null);
return new HashMap<String, Object>() {{
put("chk", "db");
put("msg", log.getSummary());
put("status", log.getSummary().equals(ret.getSummary()));
put("count", count);
}};
}
l REST接口调用数据库读写功能示例