#IT明星不是夢#【從0開始Web開發實戰】SpringBoot集成MyBatis和代碼生成工具

目錄:

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

image.png

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功能函數。

image.png

三,單元測試Mapper和Service的CRUD功能函數

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

image.png

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

image.png

五,問答:MyBatis Plus Generator生成entity沒有get/set函數?

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

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

image.png

生成的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);

StrategyConfig默認是關閉lombok模式

設置爲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研發管理分佈式系統架構,軟件質量保障

image.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章