目錄:
1. SpringBoot集成MyBatis和MyBatisPlus
2. 配置和運行代碼生成工具
3. 單元測試Service和Mapper的CRUD功能函數
4. REST接口調用數據庫讀寫功能
5. 問答:MyBatis Plus Generator生成entity沒有get/set函數?
SpringBoot是使用最多的Java開發框架,特點是自動化配置依賴模塊,提供的一系列starter腳手架便於使用,充分體現了“開箱即用”和“約定優於配置”原則。
MyBatis是一個數據庫持久層框架,採用ORM架構,映射實體和數據庫,對JDBC進行封裝,支持定製化SQL、存儲過程以及高級映射,使得開發者只需關注SQL語句和CRUD操作,而不需要處理驅動加載、創建和管理連接等複雜的過程。
MyBatis通過xml或註解的方式將要執行的操作配置起來,並通過Java對象和SQL動態參數映射,生成要執行的SQL語句,MyBatis框架執行後將結果映射爲Java對象返回。
MyBatis Plus對MyBatis進一步增強、簡化開發和提高效率。本文分享MyBatis Plus和代碼生成器的集成方法,對Service和Mpper功能單元測試,並封裝一個測試接口。
代碼文件 | 功能要點 | |
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,測試數據庫讀寫功能 |
項目代碼:https://github.com/jextop/StarterApi/
MyBatis-Plus官網:https://mybatis.plus/guide/
一,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
二,配置和運行代碼生成工具
1. MyBatis Plus提供了一個功能強大的代碼生成工具AutoGenerator,在代碼中修改文件路徑和包名稱:MyBatisPlusGenerator.java
2. 注意StrategyConfig.setEntityLombokModel(),Lombok默認爲打開模式,建議設置爲false,由於lombok對代碼侵入程度較大並且依賴IDE插件,謹慎使用。
3. 運行MyBatisPlusGenerator.main(),生成器可以放在一個獨立的項目中。
4. 生成entity, mapper和service,繼承基類BaseMapper和IService封裝的CRUD功能函數。
三,單元測試Mapper和Service的CRUD功能函數
CRUD是創建(Create)、讀取(Retrieve)、更新(Update)和刪除(Delete)4種數據庫操作的首字母縮寫,LogServiceImpl實現IService接口,聚合LogMapper功能:
測試LogService的讀寫數據庫功能:
@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());
}
}
四,REST接口調用數據庫讀寫功能
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);
}};
}
3. Postman調用接口示例
五,問答:MyBatis Plus Generator生成entity沒有get/set函數?
代碼生成器在生成Entity時,策略配置提供了一個lombok屬性,可以指定是否使用lombok模式,對應屬性訪問器的生成方式。
l MyBatis Plus提供的代碼生成器示例,打開了lombok模式:
l 生成的Entity包含@Data註解,將自動生成get/set函數
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
public class Log extends BaseEntity {
private static final long serialVersionUID = 1L;
private Integer ops;
private String summary;
}
由於lombok對代碼侵入程度較大並且依賴IDE插件,在不使用lombok時,只需設置屬性關閉即可:StrategyConfig.setEntityLombokModel(false);
l StrategyConfig默認是關閉lombok模式
l 設置爲false或者刪除該行代碼,生成的Entity將生成get/set函數
public class Auth extends BaseEntity {
private static final long serialVersionUID = 1L;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
--------------------------------
如果您覺得這篇文章對您有幫助,請點個“贊”,博主感激不盡!
Jext技術社區專注領域:軟件工程實踐,JIRA研發管理,分佈式系統架構,軟件質量保障。