MybatisPlus中的常用注解:

(1)@TableName(解决表名不一致问题)

问题: 操作数据库表时,Mapper接口继承BaseMapper<>,泛型名和数据库表名对应,如果数据表名为t_users,而BaseMapper的泛型为实体类User,导致找不到数据库的表。

 解决1: 实体类使用@TableName注解,value值为表名

@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("t_users")
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

 解决2: 如果多张表的表名为 t_user/t_cat/t_xxx,不需要为每一个实体类添加@TableName注解,在MyBatis全局配置即可,为所有表名添加前缀

mybatis-plus:  #mybatis-plus日志
  global-config: #MyBatisPlus全局配置
    db-config:  #配置数据库
      table-prefix: t_  #配置表名前缀为t_

 (2)TableID (解决主键)

问题: MyBatisPlus在实现CRUD默认会将Id作为主键,在插入数据时,使用雪花算法生成Id,如果主键不叫Id则添加功能会失败

解决:@TableId注解标识属性,将此属性对应的字段指定为主键

@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("t_users")
public class User {

    @TableId //将当前属性所对应的字段作为主键
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

        2.1:@TableId的value属性

问题: 实体类中被标识为主键的属性名为id,而数据库的主键为uid,则id属性不会对应uid字段上

解决: 使用@TableId的value属性设置当前主键字段的字段名为uid

@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("t_users")
public class User {

    @TableId(value = "uid") //value指定当前作为主键的字段
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

         2.2:@TableId的type属性

type:主键生成策略(默认的主键生成策略为雪花算法)

设置自增主键:

  1. 数据库设置主键递增

  2. 使用@TableId注解的type属性为IdType.AUTO

@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("t_users")
public class User {

    @TableId(value = "id",type = IdType.AUTO) //将当前属性所对应的字段作为主键
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

        2.3:全局配置主键生成策略

mybatis-plus:  #mybatis-plus日志
  global-config: #MyBatisPlus全局配置
    db-config:  #配置数据库
      id-type: auto  #统一设置主键策略

 (3):@TableField (解决属性名和字段名不一致)

问题: 如果实体类的普通属性名,和数据库非主键的字段名不一致

解决:@TableField设置对应字段名

@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("t_users")
public class User {

    @TableId(value = "id",type = IdType.AUTO) 
    private Long id;
    @TableField("user_name")
    private String name;
    @TableField("user_age")
    private Integer age;
    @TableField("user_email")
    private String email;
}

(4)@TableLogic(逻辑删除)

逻辑删除:表中设置字段为删除状态 比如删除为1 未删除为0 则查询时,只会查到状态为0的数据(可以进行数据恢复)。 int类型的is_deleted状态 默认为0表示未删除

物理删除:从表中删除。

@TableLogic(value = "1",delval = "0") value表示未删除,delval表示已经删除(下附全局配置)

全局配置要求必须是每个表中逻辑删除的字段都是is_delete

  #mybatis plus 配置
  global-config:
    db-config:
      #全局的表都会添加前缀
      #需要类中的注解开启 @TableName(keepGlobalPrefix = true)
      #table-prefix: "u_"
      #全局逻辑删除,需要命名规范
      logic-delete-field: "is_delete"
      logic-delete-value: "0"
      logic-not-delete-value: "1"
      #全局雪花算法
      #当服务器重启的时候,会出现一秒的校验时间的过程(时钟回拨),这一秒可能会出现重复的id
      id-type: assign_id

    @TableLogic //逻辑删除字段
    @TableField("is_deleted")
    private Integer Deleted;
 @Test
    public void testDelLogic(){
        //修改删除状态 从0->1 
        userMapper.deleteById(1);//UPDATE t_users SET is_deleted=1 WHERE id=? AND is_deleted=0
        List<User> users = userMapper.selectList(null);
        //SELECT id,name,age,email,is_deleted FROM t_users WHERE is_deleted=0
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值