提示:MyBatis-Plus(MP)是一個 MyBatis的增強版
文章目錄
- 前言
- 使用MybatisPlus的基本步驟
- 1、引入MybatisPlus依賴代替Mybatis依賴
- 2、定義Mapper接口并繼承BaseMapper
- 他是怎么知道哪張表,哪些字段呢
- 3、實體類注解
- 4、根據需要添加配置
前言
提示:這里可以添加本文要記錄的大概內容:
使用MybatisPlus的基本步驟
pom.xml
文件引入依賴
1、引入MybatisPlus依賴代替Mybatis依賴
MyBatisPlus
官方提供了starter
,其中集成了Mybatis
和MybatisPlus
的所有功能,并且實現了自動裝配效果。因此可以用MybatisPlus
的starter
代替Mybatis
的starter
:
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version>
</dependency>
2、定義Mapper接口并繼承BaseMapper
自定義的Mapper
繼承MybatisPlus
提供的BaseMapper
接口:
public interface UserMapper extends BaseMapper<User> {// 繼承 BaseMapper 后,無需手動編寫 CRUD 方法
}
單表的增刪改查可以不用寫SQL語句、mapper 接口
原來mapper
接口:
public interface UserMapper {void saveUser(User user); // 保存用戶void deleteUser(Long id); // 根據 ID 刪除用戶void updateUser(User user); // 更新用戶信息User queryUserById(@Param("id") Long id); // 根據 ID 查詢用戶List<User> queryUserByIds(@Param("ids") List<Long> ids); // 根據 ID 列表批量查詢用戶
}
繼承后:注意泛型為實體類的類型
public interface UserMapper extends BaseMapper<User> {//實體類void saveUser(User user); // 對應 BaseMapper.insert()void deleteUser(Long id); // 對應 BaseMapper.deleteById()void updateUser(User user); // 對應 BaseMapper.updateById()User queryUserById(@Param("id") Long id); // 對應 BaseMapper.selectById()List<User> queryUserByIds(@Param("ids") List<Long> ids); // 對應 BaseMapper.selectBatchIds()
}
他是怎么知道哪張表,哪些字段呢
MyBatisPlus
通過掃描實體類,并基于反射獲取實體類信息作為數據庫表信息。
遵循MP約定:
默認以類名駝峰轉下劃線作為表名
默認把名為id
的字段作為主鍵
默認把變量名駝峰轉下劃線作為表的字段名,不遵循約定就要用注解
不符合約定的要自己定義表名、字段名
3、實體類注解
三個注解的核心用途和區別:
注解 | 作用 | 常見場景 |
---|---|---|
@TableName | 指定實體類對應的數據庫表名 | 實體類名與表名不一致時 |
@TableId | 指定主鍵字段及其生成策略 | 主鍵字段名與列名不一致或需要指定生成策略 |
@TableField | 指定普通字段的映射關系或忽略字段 | 字段名與列名不一致或需要忽略某些字段 |
通過合理使用這些注解,可以輕松實現實體類與數據庫表之間的映射,同時滿足各種復雜的業務需求。
@TableName("tb_user") // 指定數據庫表名為 "tb_user"
public class User {@TableId(type = IdType.ASSIGN_ID) // 雪花算法生成主鍵private Long id;@TableField("username") // 數據庫列名為 "username",映射到實體類的 name 字段private String name;@TableField("is_married") // 數據庫列名為 "is_married",映射到實體類的 isMarried 字段private Boolean isMarried;@TableField("`order`") // 數據庫列名為 "order"(避免與 SQL 關鍵字沖突),需要使用反引號包裹private Integer order;@TableField(exist = false) // 非數據庫字段,不映射到數據庫private String address;
}
IdType
枚舉
AUTO
:數據庫自增長INPUT
:通過set
方法自行輸入主鍵值,需手動指定主鍵。ASSIGN_ID
:分配 ID,通過IdentifierGenerator
接口的nextId
方法生成主鍵,默認實現類為DefaultIdentifierGenerator
,基于雪花算法生成唯一 ID。
使用 @TableField
的常見場景
-
成員變量名與數據庫字段名不一致
當實體類的成員變量名與數據庫表中的字段名不一致時,可以使用@TableField
注解來指定數據庫字段名。 -
成員變量名以
is
開頭,且是布爾值
如果實體類的布爾類型字段以is
開頭,而數據庫字段名通常沒有is
前綴,可以通過@TableField
映射字段名。 -
成員變量名與數據庫關鍵字沖突
如果實體類的字段名與 SQL 關鍵字沖突(如order
、group
等),需要使用@TableField
注解,并通過反引號包裹字段名以避免語法錯誤。 -
成員變量不是數據庫字段
如果實體類中某些字段不需要映射到數據庫表(如臨時字段或計算字段),可以使用@TableField(exist = false)
忽略該字段。
IdType
的常見類型有哪些?
類型 | 主鍵生成方式 | 適用場景 |
---|---|---|
AUTO | 數據庫自增 | 數據庫支持自增主鍵(如 MySQL) |
ASSIGN_ID | MyBatis-Plus 雪花算法生成 | 全局唯一 ID,適用于非自增主鍵 |
INPUT | 手動輸入 | 主鍵值由業務邏輯生成 |
ASSIGN_UUID | MyBatis-Plus 生成 UUID | 字符串類型主鍵,適用于分布式系統 |
NONE | 未設置主鍵生成策略 | 主鍵生成邏輯由外部處理 |
4、根據需要添加配置
MyBatisPlus
的配置項繼承了MyBatis
原生配置和一些自己特有的配置