MyBatis-Plus 注解
在 Java 持久层框架中,MyBatis-Plus 以其强大的功能和便捷的操作,成为众多开发者的首选。MyBatis-Plus 不仅继承了 MyBatis 的灵活性,还通过丰富的注解和内置功能,极大地简化了开发流程。本文将全面解析 MyBatis-Plus 的注解,帮助开发者更好地利用这些注解提升开发效率。
一、MyBatis-Plus 简介
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,旨在简化开发、提高效率。它在保留 MyBatis 原有功能的基础上,提供了以下增强功能:
无侵入:只做增强不做改变,引入它不会对现有工程产生影响。
强大的 CRUD 操作:内置通用 Mapper 和通用 Service,通过少量配置即可实现单表大部分 CRUD 操作。
条件构造器:提供
QueryWrapper
、UpdateWrapper
等条件构造器,方便构建查询条件。分页插件:内置分页插件,支持多种数据库,开发者无需关心具体操作。
代码生成器:可以根据数据库表结构自动生成实体类、Mapper 接口、Service 层代码等。
全局配置:支持逻辑删除、自动填充、乐观锁等全局配置。
二、MyBatis-Plus 注解详解
1. 实体类注解
(1)@TableName
@TableName
注解用于指定实体类对应的数据库表名。例如:
@TableName("user")
public class User {
// 属性和方法
}
如果不指定 value
属性,MyBatis-Plus 会默认使用实体类的类名作为表名。
(2)@TableId
@TableId
注解用于指定实体类的主键字段,并可以指定主键生成策略。例如:
@TableId(type = IdType.AUTO)
private Long id;
常见的主键生成策略包括:
IdType.NONE
:默认策略,不指定主键生成方式。IdType.INPUT
:手动输入主键。IdType.AUTO
:主键自增。IdType.ASSIGN_ID
:使用雪花算法生成主键。
(3)@TableField
@TableField
注解用于指定实体类的字段与数据库表的字段映射关系。例如:
@TableField("user_name")
private String userName;
还可以使用 exist
属性指定字段是否存在,例如:
@TableField(exist = false)
private String extraField;
这表示 extraField
字段在数据库表中不存在。
(4)@TableLogic
@TableLogic
注解用于实现逻辑删除功能。例如:
@TableLogic
private Integer deleted;
这表示当 deleted
字段的值为 1
时,表示该记录已被逻辑删除。
(5)@Version
@Version
注解用于实现乐观锁功能。例如:
@Version
private Integer version;
这表示 version
字段用于乐观锁控制。
2. Mapper 注解
(1)@Mapper
@Mapper
注解用于标记 Mapper 接口,Spring 会自动扫描并注册这些接口。例如:
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
(2)@Select
@Select
注解用于指定查询 SQL 语句。例如:
@Select("SELECT * FROM user WHERE id = #{id}")
User selectUserById(@Param("id") Long id);
(3)@Insert
@Insert
注解用于指定插入 SQL 语句。例如:
@Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")
int insertUser(@Param("name") String name, @Param("age") Integer age);
(4)@Update
@Update
注解用于指定更新 SQL 语句。例如:
@Update("UPDATE user SET name = #{name} WHERE id = #{id}")
int updateUser(@Param("name") String name, @Param("id") Long id);
(5)@Delete
@Delete
注解用于指定删除 SQL 语句。例如:
@Delete("DELETE FROM user WHERE id = #{id}")
int deleteUser(@Param("id") Long id);
3. 参数映射注解
(1)@Param
@Param
注解用于为方法参数指定名称,以便在 SQL 语句中引用。例如:
@Select("SELECT * FROM user WHERE name = #{name}")
User selectUserByName(@Param("name") String name);
4. 全局配置注解
(1)@GlobalConfig
@GlobalConfig
注解用于全局配置 MyBatis-Plus 的一些功能,如逻辑删除、自动填充等。例如:
@GlobalConfig
public class MyBatisPlusConfig {
@GlobalConfig.DbConfig
private static final GlobalConfig.DbConfig dbConfig = new GlobalConfig.DbConfig()
.setLogicDeleteField("deleted")
.setLogicDeleteValue("1")
.setLogicNotDeleteValue("0");
}
(2)@AutoFill
@AutoFill
注解用于自动填充字段值。例如:
@AutoFill(value = FieldFill.INSERT)
private Date createTime;
@AutoFill(value = FieldFill.UPDATE)
private Date updateTime;
5. 条件构造器注解
(1)@QueryWrapper
@QueryWrapper
注解用于构建查询条件。例如:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "Alice").ge("age", 20);
List<User> users = userMapper.selectList(queryWrapper);
(2)@UpdateWrapper
@UpdateWrapper
注解用于构建更新条件。例如:
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", 1).set("name", "Bob");
userMapper.update(null, updateWrapper);
6. 其他注解
(1)@LambdaQueryWrapper
@LambdaQueryWrapper
注解用于构建 Lambda 形式的查询条件,避免字段名拼写错误。例如:
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getName, "Alice").ge(User::getAge, 20);
List<User> users = userMapper.selectList(lambdaQueryWrapper);
(2)@LambdaUpdateWrapper
@LambdaUpdateWrapper
注解用于构建 Lambda 形式的更新条件。例如:
LambdaUpdateWrapper<User> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.eq(User::getId, 1).set(User::getName, "Bob");
userMapper.update(null, lambdaUpdateWrapper);
三、MyBatis-Plus 注解的优势
1. 简化开发
MyBatis-Plus 的注解可以大大简化开发过程,减少重复的 SQL 编写工作。通过注解,开发者可以更专注于业务逻辑的实现。
2. 提高效率
MyBatis-Plus 提供了许多开箱即用的功能,如自动 CRUD 操作、条件构造器等,这些功能可以显著提高开发效率。
3. 灵活性
尽管 MyBatis-Plus 提供了许多便捷的功能,但它仍然保留了 MyBatis 的灵活性。开发者可以根据需要选择使用 MyBatis 或 MyBatis-Plus 的功能。
4. 强大的功能
MyBatis-Plus 提供了丰富的注解和内置功能,如逻辑删除、自动填充、乐观锁等,这些功能可以满足各种复杂的业务需求。
四、总结
MyBatis-Plus 的注解为开发者提供了许多便捷的功能,可以显著简化开发过程,提高开发效率。通过合理使用这些注解,开发者可以更专注于业务逻辑的实现,从而提高项目的质量和开发速度。希望本文的介绍能够帮助开发者更好地利用 MyBatis-Plus 的注解,提升开发效率。
评论区