MybatisPlus 常用注解

server/2024/10/18 18:13:59/

一、前言

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/server/14140.html

相关文章

3月黄油奶酪行业数据分析:安佳和妙可蓝多领军市场

近些年来&#xff0c;随着新消费主义盛行&#xff0c;老少皆宜的黄油和奶酪逐渐成为都市年轻人的烘培“新宠”。 今年3月份&#xff0c;黄油奶酪表现的中规中矩&#xff0c;处在稳定发展阶段。根据鲸参谋数据显示&#xff0c;3月份&#xff0c;在线上综合电商平台&#xff08;…

FFmpeg 解码 H.264 视频出现花屏和马赛克的解决办法

FFmpeg 解码 H.264 视频出现花屏和马赛克的解决办法 FFmpeg 解码 H.264 视频出现花屏和马赛克的解决办法四个可能的原因原因一的解决方法原因二的解决方法原因三的解决方法原因四的解决方法参考 FFmpeg 解码 H.264 视频出现花屏和马赛克的解决办法 四个可能的原因 发送数据包…

Oracle中排查谁把表数据删除更新——delete、drop、truncate

一、Oracle删除表或数据方法 简单的说Oracle中的delete、drop、truncate三个命令都可以将数据清除; Oracle中清除数据delete、drop、truncate相同点 序号描述1truncate和不带where条件的delete、以及drop都会删除表内的数据 ①【truncat table】比 【delete 】速度快,且使…

中介者模式:简化对象间的通信

在软件设计中&#xff0c;当一个系统中的对象相互高度依赖&#xff0c;且通信关系错综复杂时&#xff0c;理解和维护这样的系统将变得非常困难。中介者模式&#xff08;Mediator Pattern&#xff09;提供了一种解决方案&#xff0c;它通过定义一个中介者对象来封装一系列对象之…

如何使浏览器不提示记住密码

一、背景 为了系统使用安全&#xff0c;需要使浏览器不提示记住密码。 安全风险场景&#xff1a;对于公共使用的系统&#xff0c;A用户为了方便登录&#xff0c;选择了“记住密码”&#xff0c;B用户可以通过浏览器的密码管理查看到密码明文。 二、为什么浏览器会提示记住密码…

webots学习记录8:R2023b如何在某个零件上添加一个恒定的力(矩)

在webots安装路径下&#xff0c;从include\controller\c\webots\supervisor.h中可以看到如下定义&#xff1a; void wb_supervisor_node_add_force(WbNodeRef node, const double force[3], bool relative); void wb_supervisor_node_add_force_with_offset(WbNodeRef node, c…

微信小程序4~6章总结

目录 第四章 页面组件总结 4.1 组件的定义及属性 4.2 容器视图组件 4.2.1 view 4.2.2 scroll-view 4.2.3 swiper 4.3 基础内容组件 4.3.1 icon ​编辑 4.3.2 text 4.3.3 progress ​编辑 4.4 表单组件 4.4.1 button 4.4.2 radio 4.4.3 checkbox 4.4.4 switch …

Centos7 ElasticSearch集群搭建

1. 服务器环境配置 1.1 配置hosts文件 3台服务器都要执行 vim /etc/hosts; # 将以下内容写入3台服务器hosts文件 192.168.226.148 es001 192.168.226.149 es002 192.168.226.150 es003 1.2 关闭防火墙 3台服务器都要执行 systemctl stop firewalld; systemctl disable…