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 //逻辑删除字段
    @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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值