參考:https://www.cnblogs.com/l-y-h/p/12859477.html#_label0
一)簡單了解
1、簡介:
MyBatis-Plus(簡稱 MP)是一個MyBatis的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。
2、特性:
1)無侵入:只做增強不做改變,引入它不會對現有工程產生影響,如絲般順滑
2)損耗小:啟動即會自動注入基本 CURD,性能基本無損耗,直接面向對象操作
3)強大的 CRUD 操作:內置通用 Mapper、通用 Service,僅僅通過少量配置即可實現單表大部分 CRUD 操作,更有強大的條件構造器,滿足各類使用需求
4)支持 Lambda 形式調用:通過 Lambda 表達式,方便的編寫各類查詢條件,無需再擔心字段寫錯
5)支持主鍵自動生成:支持多達 4 種主鍵策略(內含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解決主鍵問題
6)支持 ActiveRecord 模式:支持 ActiveRecord 形式調用,實體類只需繼承 Model 類即可進行強大的 CRUD 操作
7)支持自定義全局通用操作:支持全局通用方法注入( Write once, use anywhere )
8)內置代碼生成器:采用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼,支持模板引擎,更有超多自定義配置等您來使用
9)內置分頁插件:基於 MyBatis 物理分頁,開發者無需關心具體操作,配置好插件之后,寫分頁等同於普通 List 查詢
10)分頁插件支持多種數據庫:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多種數據庫
11)內置性能分析插件:可輸出 Sql 語句以及其執行時間,建議開發測試時啟用該功能,能快速揪出慢查詢
12)內置全局攔截插件:提供全表 delete 、 update 操作智能分析阻斷,也可自定義攔截規則,預防誤操作
二)使用SpringBoot快速創建一個項目融合MyBatis-Plus;
1、創建SpringBoot項目;
點擊next,最后finish,創建完成;
2、添加MyBatis-Plus依賴;
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency>
3、創建一個表用於接下來的工作;
CREATE TABLE `user` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '主鍵', `name` varchar(255) COLLATE utf8_bin DEFAULT NULL, `pwd` varchar(255) COLLATE utf8_bin DEFAULT NULL, `address` varchar(255) COLLATE utf8_bin DEFAULT NULL, `phone` varchar(255) COLLATE utf8_bin DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
4、配置數據源信息;
application.properties文件;(如果在創建項目之前就加入了相關的依賴,下面的配置信息會自動生成,只需要改幾個自己的數據庫參數即可;)
# 應用名稱
spring.application.name=mybatis-plus-study # 應用服務 WEB 訪問端口 server.port=8085 # 數據庫驅動: spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # 數據源名稱 spring.datasource.name=mybatis-plus # 數據庫連接地址 spring.datasource.url=jdbc:mysql://localhost:3306/mybatis-plus?serverTimezone=UTC&useUnicode=true # 數據庫用戶名&密碼: spring.datasource.username=root spring.datasource.password=123456 #輸出日志 --查看執行的語句 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
5、為了方便查看數據,可以在IDEA中打開數據庫連接;
6、編寫實體類;
package com.example.mybatisplusstudy.entity;
import lombok.Data; @Data public class User { private Integer id; private String name; private String pwd; private String address; private String phone; }
要使用@Data注解必須要在IDEA中安裝lombok插件,點擊setting,選擇plugins,搜索lombok安裝即可,其次還要導入lombok依賴才可使用;
7、編寫操作實體類的 Mapper 類。
package com.example.mybatisplusstudy.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.example.mybatisplusstudy.entity.User; import org.apache.ibatis.annotations.Mapper; @Mapper //這個注解由於我在啟動類中用的不是@MapperScan,所以必須加上,@Mapper注解的接口生成一個實現類,可以省去xml的編寫 public interface UserMapper extends BaseMapper<User> { }
繼承的BaseMapper里封裝了基本的CURD方法,直接使用即可;
8、在啟動類添加注解,掃描Mapper類;
package com.example.mybatisplusstudy;
import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; @ComponentScan(basePackages = {"com.example"}) @SpringBootApplication public class MybatisPlusStudyApplication { public static void main(String[] args) { SpringApplication.run(MybatisPlusStudyApplication.class, args); } }
9、測試結果:
package com.example.mybatisplusstudy;
import com.example.mybatisplusstudy.entity.User; import com.example.mybatisplusstudy.mapper.UserMapper; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.util.Date; import java.util.List; @SpringBootTest class MybatisPlusStudyApplicationTests { @Autowired private UserMapper userMapper;
@Test public void test(){ List<User> users = userMapper.selectList(null); for(Object u : users){ System.out.println(u); } } }
三)MyBatis-Plus整合SpringBoot;
1、代碼生成器(AutoGenerator )簡介:
AutoGenerator 是 MyBatis-Plus 的代碼生成器,通過 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各個模塊的代碼,極大的提升了開發效率。
2、添加相關依賴;
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.4.1</version> </dependency> <!-- 添加 模板引擎依賴 (默認)--> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.2</version> </dependency>
3、代碼生成器代碼:
package com.example.mybatisplusstudy;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.config.DataSourceConfig; import com.baomidou.mybatisplus.generator.config.GlobalConfig; import com.baomidou.mybatisplus.generator.config.PackageConfig; import com.baomidou.mybatisplus.generator.config.StrategyConfig; import com.baomidou.mybatisplus.generator.config.rules.DateType; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; import org.junit.jupiter.api.Test; public class AutoGeneratorConfig { @Test public void autoGenerate() { // Step1:代碼生成器 AutoGenerator mpg = new AutoGenerator(); // Step2:全局配置 GlobalConfig gc = new GlobalConfig(); // 填寫代碼生成的目錄(需要修改),此處是你創建項目的地址 String projectPath = "E:\\代碼\\SpringBoot\\mybatis-plus-study"; // 拼接出代碼最終輸出的目錄 gc.setOutputDir(projectPath + "/src/main/java"); // 配置開發者信息(可選)(需要修改) gc.setAuthor("xx"); // 配置是否打開目錄,false 為不打開(可選) gc.setOpen(false); // 實體屬性 Swagger2 注解,添加 Swagger 依賴,開啟 Swagger2 模式(可選) //gc.setSwagger2(true); // 重新生成文件時是否覆蓋,false 表示不覆蓋(可選) gc.setFileOverride(false); // 配置主鍵生成策略,此處為 ASSIGN_ID(可選) gc.setIdType(IdType.ASSIGN_ID); // 配置日期類型,此處為 ONLY_DATE(可選) gc.setDateType(DateType.ONLY_DATE); // 默認生成的 service 會有 I 前綴 gc.setServiceName("%sService"); mpg.setGlobalConfig(gc); // Step3:數據源配置(需要修改) DataSourceConfig dsc = new DataSourceConfig(); // 配置數據庫 url 地址 dsc.setUrl("jdbc:mysql://localhost:3306/mybatis-plus?serverTimezone=UTC&useUnicode=true"); // dsc.setSchemaName("testMyBatisPlus"); // 可以直接在 url 中指定數據庫名 // 配置數據庫驅動 dsc.setDriverName("com.mysql.cj.jdbc.Driver"); // 配置數據庫連接用戶名 dsc.setUsername("root"); // 配置數據庫連接密碼 dsc.setPassword("123456"); mpg.setDataSource(dsc); // Step:4:包配置 PackageConfig pc = new PackageConfig(); // 配置父包名(需要修改) pc.setParent("com.example"); // 配置模塊名(需要修改) pc.setModuleName("mybatisplusstudy"); // 配置 entity 包名 pc.setEntity("entity"); // 配置 mapper 包名 pc.setMapper("mapper"); // 配置 service 包名 pc.setService("service"); // 配置 controller 包名 pc.setController("controller"); mpg.setPackageInfo(pc); // Step5:策略配置(數據庫表配置) StrategyConfig strategy = new StrategyConfig(); // 指定表名(可以同時操作多個表,使用 , 隔開)(需要修改) strategy.setInclude("qyjbxx"); // 配置數據表與實體類名之間映射的策略 strategy.setNaming(NamingStrategy.underline_to_camel); // 配置數據表的字段與實體類的屬性名之間映射的策略 strategy.setColumnNaming(NamingStrategy.underline_to_camel); // 配置 lombok 模式 strategy.setEntityLombokModel(true); // 配置 rest 風格的控制器(@RestController) strategy.setRestControllerStyle(true); // 配置駝峰轉連字符 strategy.setControllerMappingHyphenStyle(true); // 配置表前綴,生成實體時去除表前綴 // 此處的表名為 test_mybatis_plus_user,模塊名為 test_mybatis_plus,去除前綴后剩下為 user。 strategy.setTablePrefix(pc.getModuleName() + "_"); mpg.setStrategy(strategy); // Step6:執行代碼生成操作 mpg.execute(); } }
4、執行@Test方法,生成相關代碼;
5、查看結果;自動生成代碼已完成;
qyjbxx建表語句:
CREATE TABLE `qyjbxx` (
`qyjbxxid` int NOT NULL COMMENT '企業ID', `qymc` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '企業名稱', `qyxz` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '企業性質', `qydz` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '企業地址', `qyhfr` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '企業和法人', `qylxrdhhm` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '企業聯系人電話號碼', `createtime` datetime DEFAULT NULL COMMENT '創建時間', `updatetime` datetime DEFAULT NULL COMMENT '修改時間', `version` int DEFAULT '1' COMMENT '版本號(樂觀鎖,默認為1)', `yxx` int DEFAULT '0' COMMENT '有效性(用於邏輯刪除,0:有效;1:無效)', PRIMARY KEY (`qyjbxxid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
四)注解:
1、MyBatis-Plus常用注解:
【@TableName 】
@TableName 用於定義表名
注:
常用屬性:
value 用於定義表名
【@TableId】
@TableId 用於定義表的主鍵
注:
常用屬性:
value 用於定義主鍵字段名
type 用於定義主鍵類型(主鍵策略 IdType)
主鍵策略:
IdType.AUTO 主鍵自增,系統分配,不需要手動輸入
IdType.NONE 未設置主鍵
IdType.INPUT 需要自己輸入 主鍵值。
IdType.ASSIGN_ID 系統分配 ID,用於數值型數據(Long,對應 mysql 中 BIGINT 類型)。
IdType.ASSIGN_UUID 系統分配 UUID,用於字符串型數據(String,對應 mysql 中 varchar(32) 類型)。 【@TableField】 @TableField 用於定義表的非主鍵字段。 注: 常用屬性: value 用於定義非主鍵字段名 exist 用於指明是否為數據表的字段, true 表示是,false 為不是。 fill 用於指定字段填充策略(FieldFill)。 字段填充策略:(一般用於填充 創建時間、修改時間等字段) FieldFill.DEFAULT 默認不填充 FieldFill.INSERT 插入時填充 FieldFill.UPDATE 更新時填充 FieldFill.INSERT_UPDATE 插入、更新時填充。 【@TableLogic】 @TableLogic 用於定義表的字段進行邏輯刪除(非物理刪除) 注: 常用屬性: value 用於定義未刪除時字段的值 delval 用於定義刪除時字段的值 【@Version】 @Version 用於字段實現樂觀鎖
常用注解簡單應用:
package com.example.mybatisplusstudy.entity;
import com.baomidou.mybatisplus.annotation.*; import java.io.File; import java.util.Date; import java.io.Serializable; import lombok.Data; import lombok.EqualsAndHashCode; /** * @author xx * @since 2021-06-19 */ @Data @EqualsAndHashCode(callSuper = false) public class Qyjbxx implements Serializable { private static final long serialVersionUID = 1L; /** * 企業ID */ @TableId(value = "qyjbxxid", type = IdType.ASSIGN_ID) private Integer qyjbxxid; /** * 企業名稱 */ private String qymc; /** * 企業性質 */ private String qyxz; /** * 企業地址 */ private String qydz; /** * 企業和法人 */ private String qyhfr; /** * 企業聯系人電話號碼 */ private String qylxrdhhm; /** * 創建時間 */ @TableField(fill = FieldFill.INSERT) private Date createtime; /** * 修改時間 */ @TableField(fill = FieldFill.UPDATE) private Date updatetime; /** * 有效性 o:有效 1:無效 * @TableLogic 定義邏輯刪除功能,不是真刪除,數據還在,只是改變狀態 */ @TableLogic(value = "0" ,delval = "1") @TableField(fill = FieldFill.INSERT) private Integer yxx; /** * 版本號(用於樂觀鎖,默認為1) */ @Version @TableField(fill = FieldFill.INSERT) private Integer version; }