MyBatis-Plus 框架

MyBatis-Plus(簡稱 MP)是一個MyBatis的增強工具,在MyBatis的基礎(chǔ)上只做增強不做改變,為簡化開發(fā)、提高效率而生。

簡化開發(fā)、提高效率,這是MyBatis-Plus核心思想。一種集MyBatis與Hibernate的優(yōu)點一起的框架。它提供了Hibernate的單表CRUD操作的方便同時,又保留了MyBatis的特性。

特性官網(wǎng)提供

  • 無侵入:只做增強不做改變,引入它不會對現(xiàn)有工程產(chǎn)生影響,如絲般順滑
  • 損耗小:啟動即會自動注入基本 CURD,性能基本無損耗,直接面向?qū)ο蟛僮?,BaseMapper
  • 強大的 CRUD 操作:內(nèi)置通用 Mapper、通用 Service,僅僅通過少量配置即可實現(xiàn)單表大部分 CRUD 操作,更有強大的條件構(gòu)造器,滿足各類使用需求,簡單的CRUD操作不用自己編寫
  • 支持 Lambda 形式調(diào)用:通過 Lambda 表達式,方便的編寫各類查詢條件,無需再擔(dān)心字段寫錯
  • 支持主鍵自動生成:支持多達 4 種主鍵策略(內(nèi)含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解決主鍵問題
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式調(diào)用,實體類只需繼承 Model 類即可進行強大的 CRUD 操作
  • 支持自定義全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 內(nèi)置代碼生成器:采用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼,支持模板引擎,更有超多自定義配置等您來使用(自動生成代碼)
  • 內(nèi)置分頁插件:基于 MyBatis 物理分頁,開發(fā)者無需關(guān)心具體操作,配置好插件之后,寫分頁等同于普通 List 查詢
  • 分頁插件支持多種數(shù)據(jù)庫:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多種數(shù)據(jù)庫
  • 內(nèi)置性能分析插件:可輸出 SQL 語句以及其執(zhí)行時間,建議開發(fā)測試時啟用該功能,能快速揪出慢查詢
  • 內(nèi)置全局?jǐn)r截插件:提供全表 delete 、 update 操作智能分析阻斷,也可自定義攔截規(guī)則,預(yù)防誤操作

開發(fā)環(huán)境搭建

軟件 版本
HGDB 安全版V4、企業(yè)版v5及以上版本
JDK 1.6、1.7、1.8
Java IDE Eclipse、IntelliJ IDEA
MyBatis-Plus 3.5.1

示例項目

結(jié)構(gòu)圖如下:

image-20220420120354048

主要文件介紹:

pom.xml:導(dǎo)入依賴的jar包

<dependencies> 
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<!-- lombok 簡化set get toString -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<!--highgo jdbc-->
<dependency>
<groupId>com.highgo</groupId>
<artifactId>HgdbJdbc</artifactId>
<version>6.2.2</version>
</dependency>
</dependencies>

注意

使用mybatis-plus可以節(jié)省大量代碼,不要同時導(dǎo)入mybatis和mybatis-plus,可能存在版本沖突。

User.java:編寫實體類,Lombok簡化代碼

@Data
@TableName(value = "test_user")
public class User {
private Long id;
private String name;
private Date birthday;

}

注意

mybaitsplus,為mybaits的升級版,不需要寫xml配置文件,直接寫一個接口,model實體類的多加幾個注解即可實現(xiàn)。

不管是mybaits,還是mybaitsplus,數(shù)據(jù)庫里的字段必須和實體類對接上,一模一樣,不然就會報錯。

此時需要使用 @TableName 表名注解指定當(dāng)前實體類對應(yīng)的表名,比如上文中的 User 實體類對應(yīng)表名為 test_user,此外還可以用使用@TableId 注解(標(biāo)注在主鍵上)和 @TableField 注解(標(biāo)注在其他成員屬性上)來指定對應(yīng)的字段名。

UserMapper.java:創(chuàng)建一個User對象的持久層接口,只需要繼承BaseMapper并且把User對象傳進去即可

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.highgo.entity.User;
public interface UserMapper extends BaseMapper<User> {

}

DemoApplication.java:啟動類加上掃描mapper的注解

@SpringBootApplication
@MapperScan("com.highgo.mapper")
public class DemoApplication {

public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}

}

application.yml:全局配置文件,采用yml格式

# DataSource Config
spring:
datasource:
driver-class-name: com.highgo.jdbc.Driver
url: jdbc:highgo://192.168.2.5:5866/test
username: test
password: test

DemoApplicationTests.java: 測試類

@SpringBootTest
class DemoApplicationTests {

@Resource
private UserMapper userMapper;

@Test
public void testSelect() {
System.out.println(("----- selectAll method test ------"));
List<User> userList = userMapper.selectList(null);
for (User user : userList) {
System.out.println(user);
}
}

}

結(jié)果

image-20220420140907341

注意事項

1、使用PaginationInterceptor分頁插件

MyBatis-Plus自帶了一個分頁插件Interceptor,幫我們封裝好了分頁的功能,節(jié)省大量的開發(fā)時間。

針對MyBatis-Plus版本不同,PaginationInterceptor引用的包有所不同。

MyBatis-Plus2.x引用的包:com.baomidou.mybatisplus.plugins.PaginationInterceptor;

MyBatis-Plus3.x引用的包:com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor

采用@Bean注入的方式進行配置數(shù)據(jù)庫方言

paginationInterceptor.setDialectType("postgresql")

見下方代碼:

@Bean 
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
paginationInterceptor.setDialectType("postgresql");
return paginationInterceptor;
}

2、Mybatis-plus3.4.0使用MybatisPlusInterceptor攔截

3.4.0版本對此部分有更新,如果是舊版本升級,會出現(xiàn)分頁失效問題,同時會提示PaginationInterceptor過時,新版本改用了MybatisPlusInterceptor

在這里插入圖片描述

代碼示例:

image-20220511090109720