MybatisPlus 常用注解

ops/2024/10/9 9:17:45/

一、前言

Mybatis-Plus是一个在Mybatis基础上进行增强的ORM框架,提供了许多便捷的注解来简化数据库操作。本文将介绍Mybatis-Plus常用的注解以及它们的使用方法。

二、常用注解

2.1、@TableName

@TableName注解用于指定实体类对应的数据库表名。使用该注解可以省去手动编写SQL语句的繁琐过程。

实例:表名为 db_user,对应的实体类 User

@TableName(value = "db_user")
public class User {// 实体类字段
}

2.2、@TableId

@TableId注解用于标识实体类的主键字段。Mybatis-Plus支持多种主键生成策略,如自增、UUID等。通过type

type的值描述
AUTO数据库ID自增
NONE无状态,该类型为未设置主键类型
INPUTEinsert 前自行set主键值
ASSIGN_ID分配ID(主键类型为Number(Long或Integer)或String,使用接口IdentifierGenerator 的方法 nextId(默认实现类为DefaultIdentifierGenerator 雪花算法))
ASSIGN_UUID分配UUID,主键类型为String,使用接口IdentifierGenerator 的方法nextUUID(默认default方法)
ID_WORKER分布式全局唯一ID,长整型类型
UUID32位UUID字符串
ID_WORKER_STR分布式全局唯一ID,字符串类型

比如我们常用的自增主键,或者通过指定id,默认使用微博开源的雪花算法生成id,全局唯一且自增id,即:

@TableId(type = IdType.AUTO)
@TableId(type = IdType.ASSIGN_ID)

实例:

@TableId(value = "id", type = IdType.AUTO)
private Long id;

2.3、@TableField

@TableField注解用于标识实体类字段与数据库表字段的映射关系。通过该注解,可以指定字段名、是否为插入和更新字段等。

注解里的属性说明:

属性备注
value通过设置该值,对应到数据库表的字段名。
condition设定值,进而是否开启如模糊查询。
exist主要指明字段在不在数据库表中,如果 false 则不在数据库表中。
select注明查到的字段是否要出现在返回结果中,某些场景中,如 User 表中,可能有 password ,对于这种敏感的字段,是不是可以不用返回呢。
fill这里涉及自动填充,在哪些场景中会用到呢,如 插入、更新、更改的时间,我们希望自动填入,其原理其实也是通过设置实体的值,进而达到自动填入的功能。

fill填充的时机:

描述
DEFAULT默认不处理
INSERT插入时填充字段
UPDATE更新时填充字段
INSERT_UPDATE插入和更新时填充字段

如果设置了该 fill 属性,则我们需要去实现或者继承 MetaObjectHandler 接口:

2.4、@EnumValue

这里的使用上,我们需要加到会在数据库表中显示的字段上,比如我们的实体类:

GenderEnum 是一个枚举类:

package com.example.springbootmybatisplusdemo.entity;import com.baomidou.mybatisplus.annotation.EnumValue;public enum GenderEnum {Male(1, "Male"),Female(0, "Female");@EnumValueprivate final int code;private final String desc;GenderEnum(int code, String desc) {this.code = code;this.desc = desc;}
}

通过上述的配置,我们就可以在设置 gender 字段时,通过 GenderEnum 枚举类给定 Male或者Female,最后写入数据库表时,实际是写入的 code 的值,注意我们声明的 1 -> Male,0 -> Female,所以在数据库表中,gender 实际填入的值是 0/1。

2.5、@TableLogic

逻辑删除

物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除的数据

逻辑删除:假删除,将对应数据中代表是否被删除字段的状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录

实例:

@TableLogic
@TableField(value = "is_deleted")
private Integer deleted;

2.6、@Version

乐观锁

step1:数据库中增加商品表

CREATE TABLE product
(id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',name VARCHAR(30) NULL DEFAULT NULL COMMENT '商品名称',price INT(11) DEFAULT 0 COMMENT '价格',version INT(11) DEFAULT 0 COMMENT '乐观锁版本号',PRIMARY KEY (id)
);
INSERT INTO product (id, NAME, price) VALUES (1, '笔记本', 100);

step2:创建实体类

@Data
public class Product {private Long id;private String name;private Integer price;private Integer version;
}

step3:创建Mapper

public interface ProductMapper extends BaseMapper<Product> {}

step4:测试

@Resource
private ProductMapper productMapper;
@Test
public void testConcurrentUpdate() {//1、小李Product p1 = productMapper.selectById(1L);//2、小王Product p2 = productMapper.selectById(1L);//3、小李将价格加了50元,存入了数据库p1.setPrice(p1.getPrice() + 50);int result1 = productMapper.updateById(p1);System.out.println("小李修改结果:" + result1);//4、小王将商品减了30元,存入了数据库p2.setPrice(p2.getPrice() - 30);int result2 = productMapper.updateById(p2);System.out.println("小王修改结果:" + result2);//最后的结果Product p3 = productMapper.selectById(1L);System.out.println("最后的结果:" + p3.getPrice());
}

http://www.ppmy.cn/ops/14096.html

相关文章

No spring.config.import property has been defined

运行Springcloud项目出现下面错误&#xff1a; Description: No spring.config.import property has been defined Action: Add a spring.config.importnacos: property to your configuration. If configuration is not required add spring.config.importoptional:nac…

CISSP通关学习笔记:共计 9 个章节(已完结)

1. 笔记说明 第 0 章节为开篇介绍&#xff0c;不包括知识点。第 1 - 8 章节为知识点梳理汇总&#xff0c;8 个章节的知识框架关系如下图所示&#xff1a; 2. 笔记目录 「 CISSP学习笔记 」0.开篇「 CISSP学习笔记 」1.安全与风险管理「 CISSP学习笔记 」2.资产安全「 CISSP…

Centos Top 30常用命令及详解

在Linux的众多发行版中&#xff0c;CentOS以其稳定性和高效性备受青睐。掌握CentOS的操作对于系统管理员来说至关重要&#xff0c;而熟悉一系列核心命令更是提高工作效率的关键。从文件管理到系统监控&#xff0c;我们精心编制的Top 50常用CentOS命令列表是每位Linux用户的实战…

Linux系统安全:从面临的攻击和风险到安全加固、安全维护策略(文末有福利)

1. Linux面临的攻击与风险 1.1. Linux系统架构 Linux系统架构解读&#xff1a; 用户之间隔离内核态与用户态之间隔离用户进程一般以低权限用户运行系统服务一般以特权服务运行用户态通过系统调用进入内核态内核对系统资源进行管理和分配 1.2. Linux系统常见安全威胁 1.2.1.…

Android 获取sha1的快速有效的简单方法

第一步 下载apk 点击下载&#xff08;https://download.csdn.net/download/xiaohui2015/9751428&#xff09; 第二步 试用Windows键R键打开命令行 输入 adb install把apk用鼠标左键拖动到命令行自动输入路径 回车安装 第三步 打开apk 选择你要查看的apk&#xff0c;一键…

流程图画图规范

流程图画图规范 问题描述解决办法 问题描述 记录一下流程图画图规范 解决办法 1.使用标准形状&#xff1a; 矩形框&#xff08;通常表示处理步骤或操作&#xff09;。 菱形框&#xff08;表示决策点&#xff0c;两个或更多出口路径&#xff0c;通常标有“Yes”和“No”&…

java SpringMvc笔记

springMVC M:模型层,包含实体类,业务逻辑层,数据访问层; v: 视图层,html,javascript,vue等 c:控制层,它是用来接收客户端的请求,并返回响应客户端的组件,Servelet组件 SpringMVC 1、轻量级&#xff0c;基于MVC的框架 2、具备IOC和AOP 3、完全基于注解开发 client(客户端)-&am…

Arcgis 定义投影、投影变换、导出栅格为tif、矢量转tif

目录 一、Arcgis 定义投影 1、定义投影 2、设置平移 二、投影变换 1、栅格数据的投影变换 2、矢量数据的投影变换