提示: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
原生配置和一些自己特有的配置