提示:MyBatis-Plus(MP)是一个 MyBatis的增强版
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
使用MybatisPlus的基本步骤
pom.xml
文件引入依赖
1、引入MybatisPlus依赖代替Mybatis依赖
MyBatisPlus
官方提供了starter
,其中集成了Mybatis
和MybatisPlus
的所有功能,并且实现了自动装配效果。因此可以用MybatisPlus
的starter
代替Mybatis
的starter
:
xml
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
2、定义Mapper接口并继承BaseMapper
自定义的Mapper
继承MybatisPlus
提供的BaseMapper
接口:
javascript
public interface UserMapper extends BaseMapper<User> {
// 继承 BaseMapper 后,无需手动编写 CRUD 方法
}
单表的增删改查可以不用写SQL语句、mapper 接口
原来mapper
接口:
java
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 列表批量查询用户
}
继承后:注意泛型为实体类的类型
java
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 |
指定普通字段的映射关系或忽略字段 | 字段名与列名不一致或需要忽略某些字段 |
通过合理使用这些注解,可以轻松实现实体类与数据库表之间的映射,同时满足各种复杂的业务需求。
java
@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
原生配置和一些自己特有的配置