您好,登錄后才能下訂單哦!
目錄:
1.?SpringBoot集成MyBatis和MyBatisPlus
2.?配置和運行代碼生成工具
3.?單元測試Service和Mapper的CRUD功能函數(shù)
4.?REST接口調(diào)用數(shù)據(jù)庫讀寫功能
5.?問答:MyBatis Plus Generator生成entity沒有g(shù)et/set函數(shù)?
SpringBoot是使用最多的Java開發(fā)框架,特點是自動化配置依賴模塊,提供的一系列starter腳手架便于使用,充分體現(xiàn)了“開箱即用”和“約定優(yōu)于配置”原則。
MyBatis是一個數(shù)據(jù)庫持久層框架,采用ORM架構(gòu),映射實體和數(shù)據(jù)庫,對JDBC進行封裝,支持定制化SQL、存儲過程以及高級映射,使得開發(fā)者只需關(guān)注SQL語句和CRUD操作,而不需要處理驅(qū)動加載、創(chuàng)建和管理連接等復(fù)雜的過程。
MyBatis通過xml或注解的方式將要執(zhí)行的操作配置起來,并通過Java對象和SQL動態(tài)參數(shù)映射,生成要執(zhí)行的SQL語句,MyBatis框架執(zhí)行后將結(jié)果映射為Java對象返回。
MyBatis Plus對MyBatis進一步增強、簡化開發(fā)和提高效率。本文分享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 | 配置數(shù)據(jù)源 | |
代碼生成工具 | MyBatisPlusGenerator.java | MyBatis Plus提供了易用高效的代碼生成工具,配置路徑和包名稱。 |
生成代碼文件 | entity, mapper, service | 繼承基類BaseMapper和IService封裝的CRUD功能函數(shù) |
單元測試 | MapperTest.java, ServiceTest.java | 測試CRUD操作 |
功能調(diào)用 | CheckController.java | 增加REST接口/chk/db,測試數(shù)據(jù)庫讀寫功能 |
項目代碼:https://github.com/jextop/StarterApi/
MyBatis-Plus官網(wǎng):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中配置數(shù)據(jù)源:
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默認為打開模式,建議設(shè)置為false,由于lombok對代碼侵入程度較大并且依賴IDE插件,謹慎使用。
3.?運行MyBatisPlusGenerator.main(),生成器可以放在一個獨立的項目中。
4.?生成entity, mapper和service,繼承基類BaseMapper和IService封裝的CRUD功能函數(shù)。
三,單元測試Mapper和Service的CRUD功能函數(shù)
CRUD是創(chuàng)建(Create)、讀取(Retrieve)、更新(Update)和刪除(Delete)4種數(shù)據(jù)庫操作的首字母縮寫,LogServiceImpl實現(xiàn)IService接口,聚合LogMapper功能:
測試LogService的讀寫數(shù)據(jù)庫功能:
@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接口調(diào)用數(shù)據(jù)庫讀寫功能
1.?增加RestController:CheckController.java
2.?增加REST接口/chk/db,調(diào)用mapper讀寫數(shù)據(jù)庫
@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_數(shù)據(jù)庫", 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調(diào)用接口示例
五,問答:MyBatis Plus Generator生成entity沒有g(shù)et/set函數(shù)?
代碼生成器在生成Entity時,策略配置提供了一個lombok屬性,可以指定是否使用lombok模式,對應(yīng)屬性訪問器的生成方式。
l?MyBatis Plus提供的代碼生成器示例,打開了lombok模式:
l?生成的Entity包含@Data注解,將自動生成get/set函數(shù)
@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時,只需設(shè)置屬性關(guān)閉即可:StrategyConfig.setEntityLombokModel(false);
l?StrategyConfig默認是關(guān)閉lombok模式
l?設(shè)置為false或者刪除該行代碼,生成的Entity將生成get/set函數(shù)
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技術(shù)社區(qū)專注領(lǐng)域:軟件工程實踐,JIRA研發(fā)管理,分布式系統(tǒng)架構(gòu),軟件質(zhì)量保障。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。