MyBatisPlus
2026年3月6日大约 3 分钟
MyBatisPlus
MyBatis-Plus 是 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
基本使用步骤
- 添加依赖
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>最新版本号</version> </dependency> - 配置数据源
- 创建实体类并使用注解映射数据库表
- 创建Mapper接口并继承BaseMapper
public interface UserMapper extends BaseMapper<User> { // 可以添加自定义的方法 } - 在Service层调用Mapper接口的方法进行数据库操作
常用注解
提示
MyBatisPlus默认会将实体类与数据库表进行映射:
- 实体类名与表名相同(如果是驼峰命名,会转换为下划线)
- 实体类中名为
id的属性会被默认映射为主键 - 实体类属性名与表字段名相同(如果是驼峰命名,会转换为下划线)
- e.g.
createTime->create_time
如果实体类与数据库表的映射关系不符合默认规则,则可以使用以下注解进行指定。
@TableName
@TableName:指定实体类对应的数据库表名
@TableId
@TableId:指定实体类中哪个属性是主键- 属性:
value:指定主键字段名称,默认为idtype:指定主键生成策略,常用的有:IdType.AUTO:数据库自增(默认)IdType.INPUT:用户输入IdType.ASSIGN_ID:分布式ID(雪花算法)
@TableId(value = "id", type = IdType.AUTO)@TableField
以下情况无法自动转换
- 数据库表字段名与实体类属性名不一致
- 实体类属性名和数据库关键字冲突(如
order、group等) - 实体类属性名以is开头,且是布尔类型
- 实体类属性不是数据库表字段(特殊情况)
上面的情况都需要使用@TableField注解来指定映射关系。
@TableField:指定实体类属性与普通字段的映射关系- 属性:
value:指定字段名称exist:指定该属性是否为数据库表字段,默认为true,
如果设置为false,则表示该属性不是数据库表字段(特殊情况)
@TableField(value = "create_time")
private LocalDateTime createTime;
// 不是数据库表字段
@TableField(exist = false)
private String tempData;条件构造器
MyBatis-Plus提供了一个强大的条件构造器Wrapper,可以方便地构建复杂的查询条件。
LambdaQueryWrapper:支持Lambda表达式的查询条件构造器 推荐LambdaUpdateWrapper:支持Lambda表达式的更新条件构造器 推荐QueryWrapper:用于构建查询条件UpdateWrapper:用于构建更新条件
常用方法
eq:等于ne:不等于gt:大于ge:大于等于lt:小于le:小于等于like:模糊匹配in:包含between:范围查询orderByAsc:升序排序orderByDesc:降序排序
特殊方法
setSql:用于更新操作,可以直接设置SQL片段,例如:
updateWrapper.setSql("age = age + 1");select:指定查询字段
IService接口
MyBatis-Plus提供了一个IService接口,包含了常用的CRUD方法,可以直接使用,无需自己编写Mapper接口。
使用步骤
- 创建Service接口并继承IService
public interface UserService extends IService<User> { // 可以添加自定义的方法 } - 创建Service实现类并继承ServiceImpl
注意
ServiceImpl中的泛型参数需要指定 Mapper接口 和 实体类。
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
// 可以实现自定义的方法
}