【学习笔记】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主键用到序列时记得用它

相关推荐
代码游侠7 分钟前
应用--Minishell实现
linux·运维·笔记·学习·算法
zore_c12 分钟前
【C语言】Win 32 API——一部分内容详解!!!
c语言·开发语言·c++·经验分享·笔记
重生之我在番茄自学网安拯救世界17 分钟前
网络安全中级阶段学习笔记(七):Web 安全之文件上传漏洞笔记1(包含upload-labs-master靶场前三关实战)
笔记·学习·web安全·文件上传漏洞·网安基础
走在路上的菜鸟18 分钟前
Android学Dart学习笔记第十五节 类
android·笔记·学习·flutter
xian_wwq23 分钟前
【学习笔记】AI赋能安全运营中心典型场景
人工智能·笔记·学习
千天夜25 分钟前
深入排查Unity开发中的“要实例化的对象为空”异常:一次从报错到修复的完整历程
学习
知识分享小能手29 分钟前
CentOS Stream 9入门学习教程,从入门到精通,CentOS Stream 9 的 Docker 容器 —— 语法详解与实战案例(16)
学习·docker·centos
非凡ghost33 分钟前
FlexiPDF(专业PDF编辑软件)
windows·学习·pdf·软件需求
d111111111d38 分钟前
嵌入式面试问题:STM32中指针和数组的本质区别是什么,常用数组存储什么数据?
java·笔记·stm32·单片机·嵌入式硬件·学习
计算机学姐1 小时前
基于SSM的宠物领养管理系统【2026最新】
java·vue.js·后端·java-ee·tomcat·mybatis·宠物