MP1️⃣簡介 & 環境搭建
1、MyBatis Plus
MyBatis-Plus
(簡稱MP
)
MP
是一個基於 MyBatis
的增強工具,為簡化開發、提高效率而生。
2、環境搭建
基於
Spring Boot
開發
示例:User(id, name, password)
- 建立資料庫表
- 搭建 Spring Boot 專案
- 配置
- 建立實體類
- 編寫 DAO
2.1、資料庫表
-
邏輯主鍵:區分每個資料庫記錄,無實際意義。
-
業務主鍵:區分每個業務實體,即通常意義上的使用者 ID。
-
使用者名稱、密碼
CREATE TABLE `t_user` ( `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '邏輯主鍵', `user_id` VARCHAR(32) NOT NULL COMMENT '業務主鍵:使用者ID', `name` VARCHAR(16) NOT NULL COMMENT '使用者名稱', `password` VARCHAR(32) NOT NULL COMMENT '密碼', PRIMARY KEY (`id`) );
2.2、Spring Boot 專案
若建立失敗,修改
service URL
為 Customhttps://start.springboot.io
-
建立專案
-
選擇專案存放路徑,
Finish
-
匯入依賴: MySQL、MyBatis Plus、Druid 資料來源、Lombok
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.1</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.8</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
MP 依賴會自動匯入:
MyBatis
、MyBatis整合Spring
Hint:不要手動匯入這 2 個依賴,避免(版本)衝突。
2.3、配置
2.3.1、內容
application.yml
-
資料來源配置:驅動名,URL,賬號密碼,連線池型別
-
MP 配置:
-
configuration(在
mybatis
或mybatis-plus
下配置都可)- 命名風格對映:將資料庫表的下劃線命名風格,對映為 Java 的小駝峰命名風格。
- 日誌:便於除錯。
-
global-config:資料庫配置 - 表字首(見 2.3.3 說明)。
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/資料庫名?引數 username: 賬號 password: 密碼 type: com.alibaba.druid.pool.DruidDataSource mybatis-plus: configuration: map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: table-prefix: t_
-
2.3.2、說明
-
MySQL 8+
需要配置時區,兩種方式- 追加 URL 屬性(serverTimeZone)
- 修改 MySQL 配置檔案(my.ini)
-
驅動報錯:說明版本不相容,降低 Spring Boot 版本即可。
-
驅動名
// MySQL 8- com.mysql.jdbc.Driver // MySQL 8+ com.mysql.cj.jdbc.Driver
-
配置表名:
MP
預設將實體類名的首字母小寫作為表名,通常資料庫表名有自定義字首。(兩種配置方式)
-
全域性配置:核心配置類中新增
table-prefix
屬性,在首字母小寫的基礎上新增字首。mybatis-plus: global-config: db-config: table-prefix: t_
-
個別配置:實體類上新增
@TableName
註解,指定具體表名。@tableName("t_user") public class User { }
-
2.4、實體類
indi/jaywee/entity
ORM 原則:實體類的屬性名、型別,對應資料庫表(id 是邏輯主鍵,無需在 entity 呈現)
@Data
// @tableName("t_user")
public class User {
private Long userId;
private String name;
private String password;
}
2.5、DAO
2.5.1、DAO 介面
Hint:繼承 BaseMapper<E>,泛型表示要操作的實體。
public interface UserDao extends BaseMapper<User>{
}
不需要編寫 Mapper.xml 和 SQL,此時 UserDao 已獲得 CRUD 功能。
2.5.2、註冊
兩種方式
-
在 Dao 介面上新增
@Mapper
註解,前提是 Dao 介面位於 Spring Boot 啟動類的同級包或子包下。@Mapper public interface UserDao extends BaseMapper<User>{ }
-
在 Spring Boot 啟動類上新增
@MapperScan
註解,指定 Dao 介面所在包(建議)。@SpringBootApplication @MapperScan("indi.jaywee.dao") public class MpApplication { public static void main(String[] args) { SpringApplication.run(MpApplication.class, args); } }
此時 UserDao 已被 Spring 容器託管。
3、說明
經過以上步驟,即完成了基本的環境搭建。
- 繼承
BaseMapper<T>
並註冊介面,即可獲得基礎 CRUD 功能。 - 無需編寫 Dao 介面方法和 SQL 語句,簡化了 MyBatis 開發步驟。
MP 特點
- 無侵入:在 MyBatis 基礎上只做增強不做改變,不影響現有工程。
- 損耗小:自動注入基本 CRUD,效能基本無損耗,直接面向物件操作。
- 強大的 CRUD 操作:內建通用 Mapper、通用 Service。通過少量配置實現單表大部分 CRUD 操作,更有強大的條件構造器,滿足各類使用需求。
- 支援 Lambda:通過 Lambda 表示式,方便的編寫各類查詢條件,無需再擔心欄位寫錯。
- 支援主鍵自動生成:支援多達 4 種主鍵策略(內含分散式唯一 ID 生成器 - Sequence),可自由配置,完美解決主鍵問題
- 支援 ActiveRecord 模式:支援 ActiveRecord 形式呼叫,實體類只需繼承 Model 類即可進行強大的 CRUD 操作
- 支援自定義全域性通用操作:支援全域性通用方法注入( Write once, use anywhere )
- 內建程式碼生成器:採用程式碼或者 Maven 外掛可快速生成 Mapper 、 Model 、 Service 、 Controller 層程式碼,支援模板引擎,更有超多自定義配置等您來使用
-
內建分頁外掛:基於 MyBatis 物理分頁(
LIMIT
),開發者無需關心具體操作,配置好外掛之後,寫分頁等同於普通 List 查詢。 - 分頁外掛支援多種資料庫:支援 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多種資料庫
- 內建效能分析外掛:可輸出 SQL 語句以及其執行時間,建議開發測試時啟用該功能,能快速揪出慢查詢
- 內建全域性攔截外掛:提供全表 delete 、 update 操作智慧分析阻斷,也可自定義攔截規則,預防誤操作