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 接口
啟用項目,調用接口(註意)
- 端口:8081(具體可以根據自己的喜好,在 application.properties 配置文件中配置 server.port)
- 新增接口:http://localhost:8081/smpc/add
- 刪除接口:http://localhost:8081/smpc/delete
- 更新接口:http://localhost:8081/smpc/update
- 分頁查詢接口: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!
推薦閱讀:
- 使用maven開發springboot項目時pom.xml常用配置(推薦)
- 解決SpringBoot整合MybatisPlus分模塊管理遇到的bug
- 使用IDEA配置Mybatis-Plus框架圖文詳解
- mybatis-plus 如何配置邏輯刪除
- 一篇超詳細的Spring Boot整合Mybatis文章