头图

MyBatis-Plus 常用注解详解

在使用 MyBatis-Plus 进行数据库操作时,注解的合理使用能够大幅度提升开发效率。MyBatis-Plus 基于 MyBatis 的基础,增强了数据库操作的便捷性和自动化能力,使得开发人员可以专注于业务逻辑,而无需关注繁琐的 SQL 语句。

接下来,本文将对 MyBatis-Plus 中的常用注解进行详细介绍,并结合实际案例帮助你理解如何高效使用这些注解。

1. @TableName:指定数据库表名

@TableName 用于将实体类映射到数据库中的具体表。默认情况下,实体类名与表名一致,但如果表名与实体类名不一致,就需要使用 @TableName 进行指定。

@TableName("user_table")
public class User {
    private Long id;
    private String username;
    private String password;
}

在这个例子中,User 类对应的是数据库中的 user_table 表。红色的 @TableName 指定了具体的表名。

注意事项:

  • 如果没有使用 @TableName,MyBatis-Plus 会默认将类名转为下划线格式作为表名。
  • @TableName 支持逻辑分表,可以通过 autoResultMap = true 开启自定义结果集映射。

2. @TableId:指定主键

@TableId 用于指定表的主键字段,并且可以配置主键生成策略。MyBatis-Plus 提供了多种主键生成策略,例如自动增长、UUID等。

@TableId(value = "id", type = IdType.AUTO)
private Long id;

在这个例子中,id 字段是主键,并且采用了自动增长的主键生成策略。

主键生成策略:

  • IdType.AUTO: 数据库自动生成主键,一般适用于自增主键。
  • IdType.UUID: 使用 UUID 生成主键。
  • IdType.INPUT: 手动输入主键。
主键类型描述
AUTO自增
UUIDUUID 生成
INPUT手动输入

3. @TableField:指定普通字段

@TableField 用于映射表中的普通字段,并且可以设置字段的填充策略。对于插入时间、更新时间等字段,@TableField 提供了非常便捷的自动填充功能。

@TableField("username")
private String username;

@TableField(value = "create_time", fill = FieldFill.INSERT)
private LocalDateTime createTime;
  • username 字段对应的是数据库中的 username 列。
  • create_time 字段会在插入时自动填充当前时间。

字段填充策略:

  • FieldFill.INSERT: 插入时填充。
  • FieldFill.UPDATE: 更新时填充。
  • FieldFill.INSERT_UPDATE: 插入和更新时都进行填充。
填充策略触发时机
INSERT插入时自动填充
UPDATE更新时自动填充
INSERT_UPDATE插入和更新均填充

4. @Version:实现乐观锁

@Version 用于指定表中的版本字段,以实现乐观锁。通过乐观锁,避免了多个事务同时修改同一条记录时产生的数据冲突。

@Version
private Integer version;
  • version 字段会在每次更新时自动加 1。
  • 在并发环境下,如果两个用户同时更新数据,只有版本号匹配的更新操作才能成功,从而确保数据一致性。

工作流程:

  • 第一次查询数据时会获取版本号。
  • 在更新时会验证数据库中的版本号是否与查询时的一致。
  • 如果一致,则更新成功并将版本号加 1;否则更新失败。

5. @EnumValue:枚举类型字段映射

@EnumValue 注解用于指定枚举类型字段如何映射到数据库。对于一些业务场景,例如性别字段,可以使用枚举来表示。

public enum Gender {
    MALE(1), FEMALE(2);

    @EnumValue
    private final int code;

    Gender(int code) {
        this.code = code;
    }
}

在这个例子中,枚举 Gender 使用 @EnumValue 注解,表示数据库中存储的是 code 值。

使用场景:

  • 性别、状态等固定的字段可以使用枚举类型映射,便于代码中业务逻辑的处理和维护。

6. @TableLogic:逻辑删除

@TableLogic 用于实现逻辑删除。通过逻辑删除,数据不会真正从数据库中删除,而是通过修改字段的值来表示数据已被删除。

@TableLogic
private Integer deleted;

在执行删除操作时,deleted 字段会被更新为 1,表示数据已被删除。

逻辑删除优点:

  • 数据不会真正被删除,便于后续的数据恢复和审核。
  • 可以通过设置条件忽略已删除的数据,从而在业务逻辑中实现软删除。
操作deleted 字段值
正常数据0
已删除1

总结

MyBatis-Plus 提供了一系列强大的注解,帮助开发者更加便捷、高效地进行数据库操作。这些注解不仅简化了代码,还提高了代码的可读性和维护性。以下是 MyBatis-Plus 常用注解的总结表:

注解功能描述示例代码
@TableName指定数据库表名@TableName("user_table")
@TableId指定主键字段及生成策略@TableId(value = "id", type = IdType.AUTO)
@TableField指定普通字段及填充策略@TableField(value = "create_time", fill = FieldFill.INSERT)
@Version乐观锁实现@Version private Integer version;
@EnumValue枚举字段映射@EnumValue private final int code;
@TableLogic实现逻辑删除@TableLogic private Integer deleted;

以上注解的合理使用,可以大幅度提高数据库操作的开发效率,并保障数据的完整性与一致性。使用这些注解时,应根据业务需求灵活应用,以确保最优的设计和实现。


蓝易云
28 声望3 粉丝