常用注解
注解 | 含义 | 应用场景 |
---|---|---|
@TableName | 表名注解,标识实体类对应的表 | 表名和实体类名称不一致 |
@TableId | 主键注解,标识实体类的主键 | 主键需要指定自增长 |
@TableField | 字段注解 | 数据库名称和字段名称不一致 |
@TableLogic | 逻辑删除 | 不是真正物理删除数据 |
@KeySequence | 序列主键策略 | oracle的主键序列 |
注解应用
1.注解@TableName
用于表名和实体类名称不同的情况。比如:user表现在叫t_user。而我们的实体类还是叫user,那么就需要用这个注解
加以标识。
补充说明:
如果表名和实体类名一样的话,其实是不用@TableName注解的
如果所有的表名都是以t_开头的话,可以通过全局配置进行设置
mybatis-plus.global-config.db-config.table-prefix=t_
默认驼峰转下划线,比如:LmUser会自动对应为lm_user表
记忆印记:
MP中表名和实体类名称一致时,啥都不用注解。但是为了规范化还是尽量进行注解表名。
2.注解@TableId
用于注释主键。MP默认主键的名字是id,如果表中不叫id而是叫uid或者userid的话,就需要标识为id主键了。
同时MP默认主键的生成策略为雪花算法。而要修改这个主键策略也是要通过@TableId来实现。
@TableId注解的属性值包括如下:
属性 | 类型 | 是否必须 | 默认值 | 描述 |
---|---|---|---|---|
value | String | 否 | “” | 数据库字段名称 |
type | Enum | 否 | IdType.NONE | 主键类型 |
IdType值的描述:
IdType值 | 描述 |
---|---|
AUTO | 数据库 ID 自增 |
NONE | 未设置主键类型。默认雪花算法 |
INPUT | 插入前自己设置主键值 |
ASSIGN_ID | 雪花算法。默认策略。 |
ASSIGN_UUID | 没有中划线的UUID |
比如我们的主键现在叫userid而且是自增长类型的。这里就需要这样来注解:
@TableId(value = "userid", type=IdType.AUTO)
private Long id;
记忆印记:
默认id,雪花算法。
3.注解@TableField
MP默认就支持下划线转驼峰的字段映射。但是如果命名不一致时,可以用这个注解进行映射。不过还是最好不用命名不一致。这个注解的属性有很多,不过基本都用默认即可。
比如我们User表中的address字段,在实体类中非要叫addr,此时就可以通过这个注解进行配置
/*** 地址*/
@TableField("address")
private String addr;
可以通过设置来关闭驼峰转换的,如下:
记忆印记:
最好默认,不用这个注解
4.注解@TableLogic
逻辑删除注解。增加了这个注解的字段就是标识是否逻辑删除了,通常这个字段就0和1两个值。对应java的实体类对象可以是int或者bool值。在lm_user表中增加一个is_deleted字段。
对应的实体类增加isDeleted的属性。
private Boolean isDeleted;
先不加逻辑删除注解,看看删除生成的sql语句:
==> Preparing: DELETE FROM lm_user WHERE id=?
==> Parameters: 4(Integer)
加上@TableLogic
@TableLogic
private Boolean isDeleted;
再次执行删除测试,生成的sql语句就变成了update了
==> Preparing: UPDATE lm_user SET is_deleted=1 WHERE id=? AND is_deleted=0
==> Parameters: 5(Integer)
<== Updates: 1
而且查询也会加上逻辑删除为0的条件
==> Preparing: SELECT id,name,age,email,address AS addr,createtime,updatetime,
is_deleted FROM lm_user WHERE id=? AND is_deleted=0
==> Parameters: 6(Long)
记忆印记:
逻辑删除时用,delete变成update,而且删改查都会加上这个逻辑删除的条件
5.注解@KeySequence
序列主键策略,主要用在oracle数据库。
属性 | 类型 | 是否必须 | 默认值 | 描述 |
---|---|---|---|---|
value | String | 否 | “” | 序列名 |
clazz | Class | 否 | Long.class | id 的类型, 可以指定 String.class,这样返回的 Sequence 值是字符串"1" |
记忆印记
oracle主键用到序列时记得用它