MyBatis是一個數據庫持久層框架,採用ORM架構,映射實體和數據庫,對JDBC進行封裝,支持定製化SQL、存儲過程以及高級映射,使得開發者只需關注SQL語句自己,而不須要處理驅動加載、建立和管理鏈接等複雜的過程。
java
MyBatis經過xml或註解的方式將要執行的操做配置起來,並經過Java對象和SQL動態參數映射,生成要執行的SQL語句,MyBatis框架執行後將結果映射爲Java對象返回。mysql
MyBatis Plus對MyBatis進一步加強、簡化開發和提升效率。本文分享MyBatis Plus和代碼生成器的集成方法,並封裝一個測試接口。git
代碼文件github |
功能要點spring |
|
SpringBoot集成MyBatis, MyBatisPlussql |
pom.xml數據庫 |
引入MyBatis和MyBatis Plus依賴:mybatis-spring-boot-starter, mybatis-plus-boot-starter, mybatis-plus-generatormybatis |
application.yml架構 |
配置數據源app |
|
代碼生成工具 |
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接口調用數據庫讀寫功能示例