【学习笔记】Mybatis-Plus(二) :常用注解

常用注解

注解 含义 应用场景
@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而且是自增长类型的。这里就需要这样来注解:

java 复制代码
@TableId(value = "userid", type=IdType.AUTO)
private Long id;

记忆印记:

默认id,雪花算法。

3.注解@TableField

MP默认就支持下划线转驼峰的字段映射。但是如果命名不一致时,可以用这个注解进行映射。不过还是最好不用命名不一致。这个注解的属性有很多,不过基本都用默认即可。

比如我们User表中的address字段,在实体类中非要叫addr,此时就可以通过这个注解进行配置

java 复制代码
/**
 * 地址
 */
@TableField("address")
private String addr;

可以通过设置来关闭驼峰转换的,如下:

记忆印记:

最好默认,不用这个注解

4.注解@TableLogic

逻辑删除注解。增加了这个注解的字段就是标识是否逻辑删除了,通常这个字段就0和1两个值。对应java的实体类对象可以是int或者bool值。在lm_user表中增加一个is_deleted字段。

对应的实体类增加isDeleted的属性。

java 复制代码
private Boolean isDeleted;

先不加逻辑删除注解,看看删除生成的sql语句:

java 复制代码
==>  Preparing: DELETE FROM lm_user WHERE id=?
==> Parameters: 4(Integer)

加上@TableLogic

java 复制代码
@TableLogic
private Boolean isDeleted;

再次执行删除测试,生成的sql语句就变成了update了

java 复制代码
==>  Preparing: UPDATE lm_user SET is_deleted=1 WHERE id=? AND is_deleted=0
==> Parameters: 5(Integer)
<==    Updates: 1

而且查询也会加上逻辑删除为0的条件

java 复制代码
==>  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主键用到序列时记得用它

相关推荐
考虑考虑15 小时前
Mybatis实现批量插入
java·后端·mybatis
RainCity2 天前
Java Swing 自定义组件库分享(十二)
java·笔记·后端
LinXunFeng10 天前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
通信小呆呆14 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
H__Rick14 天前
自动对焦学习-3
人工智能·学习·计算机视觉
Daisy Lee14 天前
量化学习-第1章-什么是量化金融
学习·金融·datawhale
Alsn8614 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
YM52e14 天前
买菜计算器小应用 - HarmonyOS ArkUI 开发实战-PC版本
学习·华为·harmonyos·鸿蒙·鸿蒙系统
小雨下雨的雨14 天前
HarmonyOS ArkUI训练营入门-组件掌握系列-Animation 动画效果实现-PC版本
学习·华为·harmonyos·鸿蒙