SpringBoot整合MyBatis-Plus的示例代碼

前言

  使用 MyBatis-Plus 可以減少大量的開發時間,單表的增刪改查可以不用寫 sql 語句。

  本博客主要說明整合需要特別註意的地方。

  本博客分別構建瞭一個單工程項目以及一個多工程項目,主要分析單工程項目的細節。

  如有不正確的地方,歡迎指正。

源碼

  GitHub地址:https://github.com/intomylife/SpringBoot

環境

  • JDK 1.8.0 +
  • Maven 3.0 +
  • MySQL 5.6.17
  • SpringBoot 2.0.3

開發工具

  • IntelliJ IDEA

 SQL腳本 

DROP TABLE IF EXISTS `springboot_mybatis_plus` ;
CREATE TABLE `springboot_mybatis_plus` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `type` varchar(2) DEFAULT NULL COMMENT '生活用品類別:1. 傢電類 2. 廚具',
  `name` varchar(50) DEFAULT NULL COMMENT '生活用品名稱',
  `description` varchar(200) DEFAULT NULL COMMENT '生活用品描述',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='springboot整合mybatis-plus測試表';
 
INSERT INTO springboot_mybatis_plus ( type , name , description )
VALUES ('1','電飯煲','用來蒸飯'),('1','電熱壺','用來燒水'),
       ('1','空調','用來制冷或制熱'),('2','菜刀','用來切菜'),
       ('2','刨子','用來剝皮'),('2','打蛋器','用來攪拌雞蛋');

正文

單工程

POM文件(註意)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
 
    <!-- 繼承父 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
    </parent>
 
    <!-- 三坐標 -->
    <groupId>com.zwc</groupId>
    <artifactId>springboot-mybatis-plus-single</artifactId>
    <version>0.0.1-SNAPSHOT</version>
 
    <!-- 工程名稱和描述 -->
    <name>springboot-mybatis-plus-single</name>
    <description>springboot整合mybatis-plus</description>
 
    <!-- 打包方式 -->
    <packaging>jar</packaging>
 
    <!-- 在properties下聲明相應的版本信息,然後在dependency下引用的時候用${spring-version}就可以引入該版本jar包瞭 -->
    <properties>
        <!-- 編碼 -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!-- jdk -->
        <java.version>1.8</java.version>
        <!-- ali 連接池 -->
        <druid.version>1.1.9</druid.version>
        <!-- ali json -->
        <fastjson.version>1.2.47</fastjson.version>
        <jackson.mapper.asl.version>1.9.9</jackson.mapper.asl.version>
 
        <!-- mybatis -->
        <mybatis-plus-boot-starter.version>3.0-RELEASE</mybatis-plus-boot-starter.version>
        <mybatis-spring-boot-starter.version>1.3.2</mybatis-spring-boot-starter.version>
        <mybatis.ehcache.version>1.1.0</mybatis.ehcache.version>
    </properties>
 
    <dependencies>
        <!-- springboot 依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
 
        <!-- ali 連接池依賴 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>${druid.version}</version>
        </dependency>
 
        <!-- ali json依賴 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson.version}</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>${jackson.mapper.asl.version}</version>
        </dependency>
 
        <!-- mybatis 依賴 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${mybatis-spring-boot-starter.version}</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-plus-boot-starter.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.caches</groupId>
            <artifactId>mybatis-ehcache</artifactId>
            <version>${mybatis.ehcache.version}</version>
        </dependency>
 
        <!-- mysql 依賴 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
 
        <!-- 自動生成get,set方法 依賴 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
 
        <!-- springboot 測試依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
 
    <build>
        <resources>
            <!-- 打包時 maven 默認隻打包 src/main/resource 下的資源 -->
            <!-- 這裡自定義要打包的資源文件的路徑,一般是 Mapper 文件的位置 -->
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
 
</project>
  • Maven 項目的核心文件,用來管理項目的依賴
  • 依賴 mybatis-plus-boot-starter 後就把 MyBatis-Plus 整合到 SpringBoot 中瞭

 application.properties(註意)

# 端口
server.port=8081
 
# 數據源 
## 驅動
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
## url 註意把數據庫換成你本地的數據庫名稱
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/base_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=PRC&useSSL=false
## 用戶名 註意把用戶名換成你本地的用戶名
spring.datasource.username=root
## 密碼 註意把密碼換成你本地的密碼
spring.datasource.password=123456
 
# mybatis-plus
mybatis-plus.mapper-locations=classpath:com/zwc/base/mapper/xml/*.xml
mybatis-plus.type-aliases-package=com.zwc.base.domain
# 日志
logging.level.com.zwc.base.mapper=debug
  • SpringBoot 會默認讀取加載 resources 文件夾下的 application.properties 文件裡的配置信息
  • 配置 mybatis-plus:mapper-locations – > mapper 文件的位置;type-aliases-package – > 實體類所在的包 

自定義配置(註意)

package com.zwc.base.config;
 
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
/**
 * @ClassName MyBatisPlusConfig
 * @Desc TODO   mybatis-plus 配置
 * @Date 2019/3/26 16:00
 * @Version 1.0
 */
@Configuration
public class MyBatisPlusConfig {
 
    /*
     * @ClassName MyBatisPlusConfig
     * @Desc TODO   mybatis-plus 配置攔截
     * @Date 2019/3/26 18:13
     * @Version 1.0
     */
    @Bean
    public PaginationInterceptor paginationInterceptor(){
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 設置方言
        paginationInterceptor.setDialectType("mysql");
        return paginationInterceptor;
    }
}
  • @Configuration + @Bean 註解 註入 PaginationInterceptor 類 配置 MyBatis-Plus 分頁插件
  • 設置方言為 MySQL 數據庫

實體類(註意)

基礎實體類,與數據庫字段一一對應

package com.zwc.base.domain;
 
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import java.io.Serializable;
/**
 * @ClassName SpringbootMybatisPlus
 * @Desc TODO   springboot整合mybatis-plus測試表
 * @Date 2019/3/26 17:45
 * @Version 1.0
 */
@Data
public class SpringbootMybatisPlus extends Model<SpringbootMybatisPlus> {
    private static final long serialVersionUID = -7876888313791106541L;
    /**
     * 自增ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
     * 生活用品類別:1. 傢電類 2. 廚具
    private String type;
     * 生活用品名稱
    private String name;
     * 生活用品描述
    private String description;
    public static final String ID = "id";
    public static final String TYPE = "type";
    public static final String NAME = "name";
    public static final String DESCRIPTION = "description";
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}

需繼承 MyBatis-Plus 的 Model 類,使用 @TableId 註解標註 id 字段

還有兩個擴展實體類:封裝請求參數(SpringbootMybatisPlusRequestQueryDTO)以及

                                    封裝響應結果(SpringbootMybatisPlusResponseDTO)

這裡就不占篇幅瞭,可以到 GitHub 中獲取源碼。

Mapper 接口(註意)

package com.zwc.base.mapper;
 
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zwc.base.domain.SpringbootMybatisPlus;
import com.zwc.base.dto.request.SpringbootMybatisPlusRequestQueryDTO;
import com.zwc.base.dto.response.SpringbootMybatisPlusResponseDTO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/*
 * @ClassName SpringbootMybatisPlusMapper
 * @Desc TODO   springboot整合mybatis-plus測試表 mapper 接口
 * @Date 2019/3/26 17:52
 * @Version 1.0
 */
public interface SpringbootMybatisPlusMapper extends BaseMapper<SpringbootMybatisPlus> {
    // 分頁查詢測試表數據
    List<SpringbootMybatisPlusResponseDTO> query(@Param("data") SpringbootMybatisPlusRequestQueryDTO springbootMybatisPlusRequestQueryDTO , Page<SpringbootMybatisPlusResponseDTO> page);
}

需繼承 MyBatis-Plus 的 BaseMapper 接口,註意類型是繼承過 MyBatis-Plus 的 Model 類的實體類。BaseMapper 定義瞭很多函數,方便開發使用

Service 服務實現類(註意)

@Service
public class SpringbootMybatisPlusServiceImpl extends ServiceImpl<SpringbootMybatisPlusMapper,SpringbootMybatisPlus> implements SpringbootMybatisPlusService {
    // 這裡隻貼出瞭關鍵需要註意的代碼塊
    ...
}

需繼承 MyBatis-Plus 的 ServiceImpl 類,即可調用 baseMapper 中的方法。如果還需調用其他自定義的 Mapper ,就用@Resource 註解註入

Controller 前端控制器(註意)

package com.zwc.base.controller;
 
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zwc.base.dto.request.SpringbootMybatisPlusRequestQueryDTO;
import com.zwc.base.dto.response.SpringbootMybatisPlusResponseDTO;
import com.zwc.base.service.SpringbootMybatisPlusService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
/**
 * @ClassName SpringbootMybatisPlusController
 * @Desc TODO   springboot整合mybatis-plus測試表 前端控制器
 * @Date 2019/3/26 18:14
 * @Version 1.0
 */
@RestController
@RequestMapping("smpc")
public class SpringbootMybatisPlusController {
    @Autowired
    private SpringbootMybatisPlusService springbootMybatisPlusService;
    /*
     * @ClassName SpringbootMybatisPlusController
     * @Desc TODO   新增數據
     * @Date 2019/3/27 11:40
     * @Version 1.0
     */
    @RequestMapping("/add")
    @ResponseBody
    public String add(){
        return springbootMybatisPlusService.add();
    }
     * @Desc TODO   刪除數據
     * @Date 2019/3/27 13:15
    @RequestMapping("/delete")
    public String delete(){
        return springbootMybatisPlusService.delete();
     * @Desc TODO   更新數據
     * @Date 2019/3/27 13:46
    @RequestMapping("/update")
    public String update(){
        return springbootMybatisPlusService.update();
     * @Desc TODO   分頁查詢測試表數據
     * @Date 2019/3/26 18:10
    @RequestMapping("/query")
    public Page<SpringbootMybatisPlusResponseDTO> query(@RequestParam(value = "springbootMybatisPlusRequestQueryDTO",required = false) SpringbootMybatisPlusRequestQueryDTO springbootMybatisPlusRequestQueryDTO){
        return springbootMybatisPlusService.getDataByPage(springbootMybatisPlusRequestQueryDTO);
}

 增刪改查的方法各有一例

SpringBoot 啟動類(註意)

package com.zwc;
 
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
 
@SpringBootApplication(scanBasePackages = "com.zwc")
@MapperScan("com.zwc.base.mapper")
public class SpringbootMybatisPlusSingleApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(SpringbootMybatisPlusSingleApplication.class, args);
    }
 
}

使用 @MapperScan 註解掃描 Mapper 接口

啟用項目,調用接口(註意)

  1.  端口:8081(具體可以根據自己的喜好,在 application.properties 配置文件中配置 server.port)
  2. 新增接口:http://localhost:8081/smpc/add
  3. 刪除接口:http://localhost:8081/smpc/delete
  4. 更新接口:http://localhost:8081/smpc/update
  5. 分頁查詢接口:http://localhost:8081/smpc/query項目結構 

以上就是單工程整合 MyBatis-Plus 需要註意的地方,下面說說多工程項目的結構

多工程

為什麼要構建多工程?

一般在實際工作中,項目的代碼量會很大,而且隨著時間的推移,還要不停的追加新的功能,如果開始不註意,全部籠統的寫到一個工程中,那樣越到後面開發就會越困難。

如何劃分模塊?

一般開發中會將公共的部分提取出來,比如工具類,系統常量,公共配置等等.. 它們通常叫做 commons 工程;

還有一部分就是帶有業務邏輯的工程,裡面可能會包含 基礎模塊,用戶模塊,訂單模塊等等…,

它們通常叫做 service工程。

commons 工程 – POM 文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
 
    <!-- 三坐標 -->
    <groupId>com.zwc</groupId>
    <artifactId>springboot-mybatis-plus-commons</artifactId>
    <version>0.0.1-SNAPSHOT</version>
 
    <!-- 工程名稱和描述 -->
    <name>springboot-mybatis-plus-commons</name>
    <description>公用工程</description>
 
    <!-- 打包方式 -->
    <packaging>jar</packaging>
 
    <!-- 在properties下聲明相應的版本信息,然後在dependency下引用的時候用${spring-version}就可以引入該版本jar包瞭 -->
    <properties>
        <!-- 編碼 -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!-- jdk -->
        <java.version>1.8</java.version>
 
        <!-- springboot -->
        <platform-bom.version>Cairo-SR3</platform-bom.version>
 
        <!-- ali 連接池 -->
        <druid.version>1.1.9</druid.version>
        <!-- ali json -->
        <fastjson.version>1.2.47</fastjson.version>
        <jackson.mapper.asl.version>1.9.9</jackson.mapper.asl.version>
 
        <!-- mybatis -->
        <mybatis-plus-boot-starter.version>3.0-RELEASE</mybatis-plus-boot-starter.version>
        <mybatis-spring-boot-starter.version>1.3.2</mybatis-spring-boot-starter.version>
        <mybatis.ehcache.version>1.1.0</mybatis.ehcache.version>
    </properties>
 
    <!-- 加入依賴 -->
    <dependencies>
        <!-- ali 連接池依賴 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>${druid.version}</version>
        </dependency>
 
        <!-- mysql 依賴 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
 
        <!-- ali json依賴 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson.version}</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>${jackson.mapper.asl.version}</version>
        </dependency>
 
        <!-- mybatis 依賴 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${mybatis-spring-boot-starter.version}</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-plus-boot-starter.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.caches</groupId>
            <artifactId>mybatis-ehcache</artifactId>
            <version>${mybatis.ehcache.version}</version>
        </dependency>
    </dependencies>
 
    <!-- 依賴 jar 包版本管理的管理器 -->
    <!-- 如果 dependencies 裡的 dependency 自己沒有聲明 version 元素,那麼 maven 就此處來找版本聲明。 -->
    <!-- 如果有,就會繼承它;如果沒有就會報錯,告訴你沒有版本信息 -->
    <!-- 優先級:如果 dependencies 裡的 dependency 已經聲明瞭版本信息,就不會生效此處的版本信息瞭 -->
    <dependencyManagement>
        <dependencies>
            <!-- SpringBoot -->
            <dependency>
                <groupId>io.spring.platform</groupId>
                <artifactId>platform-bom</artifactId>
                <version>${platform-bom.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
 
    <!-- 插件依賴 -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
 
</project>

配置一些共用依賴,其中包括 mybatis-plus-boot-starter 依賴用來整合 

MyBatis-Plus commons 工程 – system.properties

# mybatis-plus
## 掃描 mapper 文件
mybatis-plus.mapper-locations=classpath*:com/zwc/*/mapper/xml/*.xml
## 掃描實體類
mybatis-plus.type-aliases-package=com.zwc.*.domain
  •  一些共用配置,不經常修改的,或者是可以統一修改的
  • 這裡掃描 Mapper 文件和實體類都用瞭通配符的方式
  • 比如還可以配置 OSS 的配置信息,Redis 的配置信息,MongoDB 的配置信息等等.. 

commons 工程 – 自定義配置

package com.zwc.core.config;
 
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
/**
 * @ClassName MyBatisPlusConfig
 * @Desc TODO   mybatis-plus 配置
 * @Date 2019/3/26 16:00
 * @Version 1.0
 */
@Configuration
@PropertySource("classpath:system.properties")
public class MyBatisPlusConfig {
    /*
     * @ClassName MyBatisPlusConfig
     * @Desc TODO   mybatis-plus 配置攔截
     * @Date 2019/3/26 18:13
     * @Version 1.0
     */
    @Bean
    public PaginationInterceptor paginationInterceptor(){
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 設置方言
        paginationInterceptor.setDialectType("mysql");
        return paginationInterceptor;
    }
}

註意這裡在註入類的時候,還要加載自定的配置文件,因為 SpringBoot 不會默認加載 system.properties

其他代碼就與單工程差不多一致瞭 

commons 工程 – 項目結構

service 工程 – 項目結構

  • 在 service 總工程中創建瞭一個 base-service 的基礎模塊
  • 每一個模塊中都包含 api 和 core

  • api:主要包含接口,常量以及實體類的擴展類

  • core:帶有啟動類的工程,此模塊的核心代碼都在裡面

把多工程項目使用 IntelliJ IDEA  打開

  • 把項目從 GitHub 中下載到你的本地
  • 打開 IntelliJ IDEA 
  • 點擊 File -> Open
  • 打開你下載到本地的項目目錄
  • springboot-mybatis-plus -> multi-module -> springboot-mybatis-plus-service(選擇打開此工程)
  • 打開 service 工程後
  • 再次點擊 File -> Project Structrue
  • 選擇 Modules,點擊 '+' 符號
  • 點擊 Import  Module
  • 還是打開你下載到本地的項目目錄
  • springboot-mybatis-plus -> multi-module -> springboot-mybatis-plus-commons -> pom.xml
  • 點擊 OK
  • 點擊 Next,Finish
  • 點擊 Apply,OK

結語

到此 SpringBoot 整合 MyBatis-Plus 就結束瞭,關鍵的點就這麼多,多多嘗試,一定會成功的!

到此這篇關於SpringBoot整合MyBatis-Plus的示例代碼的文章就介紹到這瞭,更多相關SpringBoot整合MyBatis-Plus內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: