溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

#IT明星不是夢#【從0開始Web開發(fā)實戰(zhàn)】SpringBo

發(fā)布時間:2020-02-14 11:09:20 來源:網(wǎng)絡(luò) 閱讀:1369 作者:wx5b3c0a4298f7b 欄目:MySQL數(shù)據(jù)庫

目錄:

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依賴。

#IT明星不是夢#【從0開始Web開發(fā)實戰(zhàn)】SpringBo

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ù)。

#IT明星不是夢#【從0開始Web開發(fā)實戰(zhàn)】SpringBo

三,單元測試Mapper和Service的CRUD功能函數(shù)

CRUD是創(chuàng)建(Create)、讀取(Retrieve)、更新(Update)和刪除(Delete)4種數(shù)據(jù)庫操作的首字母縮寫,LogServiceImpl實現(xiàn)IService接口,聚合LogMapper功能:

#IT明星不是夢#【從0開始Web開發(fā)實戰(zhàn)】SpringBo

測試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)用接口示例

#IT明星不是夢#【從0開始Web開發(fā)實戰(zhàn)】SpringBo

五,問答:MyBatis Plus Generator生成entity沒有g(shù)et/set函數(shù)?

代碼生成器在生成Entity時,策略配置提供了一個lombok屬性,可以指定是否使用lombok模式,對應(yīng)屬性訪問器的生成方式。

l?MyBatis Plus提供的代碼生成器示例,打開了lombok模式:

#IT明星不是夢#【從0開始Web開發(fā)實戰(zhàn)】SpringBo

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ì)量保障。

#IT明星不是夢#【從0開始Web開發(fā)實戰(zhàn)】SpringBo

向AI問一下細節(jié)

免責(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)容。

AI