当前位置: 首页 > news >正文

MybatisPlus------常用注解和逻辑删除以及设置统一前缀以及主键生成策略(六)

MybatisPlus------常用注解以及设置统一前缀以及主键生成策略(六)

在使用MybatisPlus的过程中时,实力类的Mapper继承BaseMapper,此时不要添加@TableName注解也能够对表数据实现增删改查。

// mybatispuls 提供了接口实现单表的增删改查
// 使用
@Mapper
public interface BaseProcedureMapper extends BaseMapper<BaseProcedure> {Map<String,BaseProcedure> selcetMapById(String id);
}

为什么不加@TableName注解也能够对表进行增删改查?

如果没写@TableName,MybatisPlus会通过BaseMapper中传入的实体类对象,根据驼峰转下划线的规则,来匹配数据表。
比如BaseProcedure类,会转义成base_procedure表
如果该表名,或表面和实体类的关系不匹配,就会报找不到这个表的异常

如果修改表名,或者不符合驼峰转下划线的规则,需要指定表名,也建议最好指定表名

在实体类上加上@TableName(“表名”),即可为实体类指定对应表。

@Data
@TableName("base_procedure")
public class BaseProcedure {// 默认使用雪花算法,对象ID需要使用 Long类型@TableId(value = "id", type = IdType.ASSIGN_UUID)private String id;private String procedureCode;

有时公司会统一设置表名为t_作为起始,或者base_作为起始。

此时可以MybatisPlus可在配置文件中,设置全局的统一的前缀,这样@TableName上就不用写统一的前缀
在application.yml文件中配置

mybatis-plus:## 设置log打印执行的SQL语句configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl## 设置mybatisplus的全局配置global-config:db-config:## 设置实体类所对应的表的统一前缀table-prefix: base_

实体类进行修改

@Data
@TableName("procedure")
public class BaseProcedure {// 默认使用雪花算法,对象ID需要使用 Long类型@TableId(value = "id", type = IdType.ASSIGN_UUID)private String id;private String procedureCode;

@TableId

当主键不为id,为uid时

在不写@TableId时,当主键为id时,myabtisPlus也能够对表操作进行解析,一旦不为id,比如改为uid,则会解析失败。
此时需要在uid属性上加上@TableId注解,指定该字段作为主键。

@Data
@TableName("procedure")
public class BaseProcedure {// 默认使用雪花算法,对象ID需要使用 Long类型// 将属性所对应的字段指定为主键@TableId(type = IdType.ASSIGN_UUID)private String uid;

当属性为id,但主键为uid时value

@TableId中有value属性,能够指定当前属性,对应数据库表中的哪个字段。

@Data
@TableName("procedure")
public class BaseProcedure {// 默认使用雪花算法,对象ID需要使用 Long类型// 将属性所对应的字段指定为主键@TableId(value = "uid", type = IdType.ASSIGN_UUID)private String id;

@TableId的type属性

type默认时雪花算法。

type = IdType.AUTO 自动递增,数据库必须设置id自增,否则无效
type = IdType.NONE 雪花算法生成ID
type = IdType.INPUT 用户输入ID
type = IdType.ASSIGN_ID 雪花算法适用于Number和String,与数据库是否设置无关
type = IdType.ASSIGN_UUID 生成UUID随机ID

/*** 生成ID类型枚举类** @author hubin* @since 2015-11-10*/
@Getter
public enum IdType {/*** 数据库ID自增* <p>该类型请确保数据库设置了 ID自增 否则无效</p>*/AUTO(0),/*** 该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)*/NONE(1),/*** 用户输入ID* <p>该类型可以通过自己注册自动填充插件进行填充</p>*/INPUT(2),/* 以下2种类型、只有当插入对象ID 为空,才自动填充。 *//*** 分配ID (主键类型为number或string),* 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(雪花算法)** @since 3.3.0*/ASSIGN_ID(3),/*** 分配UUID (主键类型为 string)* 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(UUID.replace("-",""))*/ASSIGN_UUID(4);private final int key;IdType(int key) {this.key = key;}
}

如果自己在传参时,传入ID,那么配置的idtype就不会生效

通过全局配置主键生成策略

通过操作id-type属性。

mybatis-plus:## 设置log打印执行的SQL语句configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl## 设置mybatisplus的全局配置global-config:db-config:## 设置实体类所对应的表的统一前缀table-prefix: base_## 设置全局主键生成策略## id-type: assign_id## id-type: assign_uuid## id-type: auto## id-type: inputid-type: none

@TableField

主键不一致时可以通过@TableId注解。

mybatisplus会默认的将驼峰转换为下划线,不需要额外配置。

@TableField:指定属性对应的字段名

@Accessors(chain = true)
@TableName("base_procedure")
public class BaseProcedure {// 默认使用雪花算法,对象ID需要使用 Long类型// 将属性所对应的字段指定为主键@TableId(value = "id", type = IdType.ASSIGN_UUID)private String id;@TableField("procedure_code")private String procedureCode;

@TableLogic逻辑删除

用于逻辑删除。
在是否生效字段上加上@TableLogic,这个字段就会用于逻辑删除。

Accessors(chain = true)
@TableName("base_procedure")
public class BaseProcedure {// 默认使用雪花算法,对象ID需要使用 Long类型// 将属性所对应的字段指定为主键@TableId(value = "id", type = IdType.ASSIGN_UUID)private String id;@TableField("procedure_code")private String procedureCode;private String procedureName;//表示逻辑删除字段//是否生效标志@TableLogicprivate Integer active;

当执行delete语句时,本质上并不会执行delete语句,而是执行update语句,

    @Testpublic void testDeleteByID(){//根据对象的id进行删除BaseProcedure baseProcedure = new BaseProcedure();baseProcedure.setId("ef5397a26b7a469c6fe1de0e");int result = baseProcedureMapper.deleteById(baseProcedure);System.out.println("result:{}"+result);}

执行SQL看控制台打印

==>  Preparing: UPDATE base_procedure SET active=1 WHERE id=? AND active=0
==> Parameters: ef5397a26b7a469c6fe1de0e(String)
<==    Updates: 0

@TableLogic 如不特殊注明,默认生效为0,失效为1.如果定义的相反,需要特殊注明

	@TableLogic(value="原值",delval="改值")value = "" 未删除的值,默认值为0delval = "" 删除后的值,默认值为1

修改注解

    //表示逻辑删除字段//是否生效标志@TableLogic(value = "1",delval = "0")private Integer active;

执行删除语句,查看执行SQL

==>  Preparing: UPDATE base_procedure SET active=0 WHERE id=? AND active=1
==> Parameters: ef5397a26b7a469c6fe1de0e(String)
<==    Updates: 1

并且在执行maybatispuls框架所提供的数据库操作时,会自动带上这个生效条件

 @Testpublic void testSelectList(){//会自带active = 1List<BaseProcedure> baseProceduress = baseProcedureMapper.selectList(null);baseProceduress.forEach(System.out::println);//会自带active = 1List<BaseProcedure> baseProcedures = baseProcedureMapper.selectList(new QueryWrapper<BaseProcedure>().eq("id","ef5397a26b7a469c6fe1de0e"));baseProcedures.forEach(System.out::println);//不会自带active = 1Map<String, BaseProcedure> result = baseProcedureMapper.selcetMapById("ef5397a26b7a469c6fe1de0e");System.out.println(result);//会自带active = 1Long aLong = baseProcedureMapper.selectCount(new LambdaQueryWrapper<BaseProcedure>().eq(BaseProcedure::getId, "ef5397a26b7a469c6fe1de0e"));System.out.println(aLong);}

如果是在mapperl.xml中自定义的SQL,需要自己加上active=1的生效条件,否则不会生效

相关文章:

MybatisPlus------常用注解和逻辑删除以及设置统一前缀以及主键生成策略(六)

MybatisPlus------常用注解以及设置统一前缀以及主键生成策略&#xff08;六&#xff09; 在使用MybatisPlus的过程中时&#xff0c;实力类的Mapper继承BaseMapper&#xff0c;此时不要添加TableName注解也能够对表数据实现增删改查。 // mybatispuls 提供了接口实现单表的增…...

JQuery工具框架

JQuery工具框架 直接使用js编程比较麻烦&#xff0c;而且还必须考虑浏览器的差异性。 为了简化javascript的开发&#xff0c;一些javascript库诞生了。当今流行的javascript库有&#xff1a;jQuery诞生于2005 年&#xff0c;Dojo、 EXT_JS、DWR、YUI… jQuery是John Resig在…...

同一个整型常量怎样在不同进制间之间转换?

整型常量可以分别用二进制、八进制、十进制和十六进制表示&#xff0c;不同的进制并不影响数据本身的大小&#xff0c;同一个整型常量可以在不同进制之间转换&#xff0c;具体转换方式如下。1.十进制和二进制之间的转换(1)十进制转二进制。十进制转换成二进制就是一个除以2取余…...

UVa 225 Golygons 黄金图形 暴力搜索 剪枝 状态判断

题目链接&#xff1a;Golygons 题目描述&#xff1a; 给定nnn和kkk个障碍物的坐标&#xff0c;你需要走nnn次&#xff0c;第一次走一个单位距离&#xff0c;第二次走二个单位距离&#xff0c;…&#xff0c;第nnn次走nnn个单位距离。走得过程中不能穿过或者到达障碍物所在的点&…...

PowerShell中的对象是神马?

在PowerShell中,无处不在体现出一个概念,这个概念是什么呢?就是对象,对象是面向对象的语言中非常重要的概念,PowerShell的底层是.net,也是面向对象的语言,因此它也继承了面向对象的语言的语法特性。但是很多人在使用PowerShell 语言的时候会觉得有些疑惑,到底什么是Pow…...

Proxy lab

CSAPP Proxy Lab 本实验需要实现一个web代理服务器&#xff0c;实现逐步从迭代到并发&#xff0c;到最终的具有缓存功能的并发代理服务器。 Web 代理是充当 Web 浏览器和终端服务器之间的中间人的程序。浏览器不是直接联系终端服务器获取网页&#xff0c;而是联系代理&#x…...

【机器学习】Sklearn 集成学习-投票分类器(VoteClassifier)

前言 在【机器学习】集成学习基础概念介绍中有提到过&#xff0c;集成学习的结合策略包括&#xff1a; 平均法、投票法和学习法。sklearn.ensemble库中的包含投票分类器(Voting Classifier) 和投票回归器&#xff08;Voting Regressor)&#xff0c;分别对回归任务和分类任务的…...

Day892.MySql读写分离过期读问题 -MySQL实战

MySql读写分离过期读问题 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于MySql读写分离过期读问题的内容。 一主多从架构的应用场景&#xff1a;读写分离&#xff0c;以及怎么处理主备延迟导致的读写分离问题。 一主多从的结构&#xff0c;其实就是读写分离的基本…...

无线蓝牙耳机哪个品牌音质好?性价比高音质好的蓝牙耳机排行榜

其实蓝牙耳机购买者最担忧的就是音质问题&#xff0c;怕拿到手的蓝牙耳机低频过重又闷又糊&#xff0c;听歌闷耳的问题&#xff0c;但从2021年蓝牙技术开始突飞猛进后&#xff0c;蓝牙耳机的音质、连接甚至是功能都发生了很大的变化&#xff0c;下面我分享几款性价比高音质的蓝…...

店铺微信公众号怎么创建?

有些小伙伴问店铺微信公众号怎么创建&#xff0c;在解答这个问题之前&#xff0c;先简单说说店铺和微信公众号关系&#xff1a; 店铺一般是指小程序店铺&#xff0c;商家通过小程序店铺来卖货&#xff1b;微信公众号则是一个发布信息的平台。但是两者之间可以打通&#xff0c;…...

goLang Mutex用法案例详解

Golang以其并发性Goroutines而闻名。不仅是并发,还有更多。 因此,在这种情况下,我们必须确保多个goroutines不应该同时试图修改资源,从而导致冲突。 为了确保资源一次只能被一个goroutine访问,我们可以使用一个叫做sync.Mutex的东西。 This concept is called mutual ex…...

java常见的异常

异常分类 Throwable 是java异常的顶级类&#xff0c;所有异常都继承于这个类。 Error,Exception是异常类的两个大分类。 Error Error是非程序异常&#xff0c;即程序不能捕获的异常&#xff0c;一般是编译或者系统性的错误&#xff0c;如OutOfMemorry内存溢出异常等。 Exc…...

从0开始学python -33

Python3 输入和输出 -1 在前面几个章节中&#xff0c;我们其实已经接触了 Python 的输入输出的功能。本章节我们将具体介绍 Python 的输入输出。 — 输出格式美化 Python两种输出值的方式: 表达式语句和 print() 函数。 第三种方式是使用文件对象的 write() 方法&#xff…...

ModuleNotFoundError: No module named ‘glfw‘ 解决方案

错误描述 env gym.make(env_id) File "/opt/conda/envs/WNPG/lib/python3.8/site-packages/gym/envs/registration.py", line 619, in make env_creator load(spec_.entry_point) File "/opt/conda/envs/WNPG/lib/python3.8/site-packages/gym/envs/r…...

RadZen运行和部署,生成业务web应用程序

RadZen运行和部署,生成业务web应用程序 快速简单地生成业务web应用程序&#xff0c;可视化地构建和启动web程序&#xff0c;而我们为您创建新代码。 从信息开始 连接到数据库。Radzen推断您的信息并生成一个功能完备的web应用程序。支持MSSQL REST服务。 微调 添加页面或编辑生…...

分享7个比B站更刺激的老司机网站,别轻易点开

俗话说摸鱼一时爽&#xff0c;一直摸一直爽&#xff0c;作为一个程序员老司机了&#xff0c;一头乌黑浓密的头发还时不时被同事调侃&#xff0c;就靠这10个网站让我健康生活&#xff0c;不建议经常性使用&#xff0c;因为还有一句俗话&#xff0c;那就是“摸鱼一时爽&#xff0…...

浅析:如何在Vue3+Vite中使用JSX

目录 0. Vue3&#xff0c;Vite&#xff0c;JSX 三者的关系 JSX介绍 在 Vue3 中使用 JSX 安装插件&#xff08;vitejs/plugin-vue-jsx&#xff09; 新建 jsx 文件 语法 补充知识&#xff1a;注意事项 0. Vue3&#xff0c;Vite&#xff0c;JSX 三者的关系 Vue3、Vite 和 …...

开发小程序需要什么技术?

小程序是一种新的开发能力&#xff0c;相比于原生APP 开发周期短&#xff0c;开发者可以快速地开发一个小程序。小程序可以在微信内被便捷地获取和传播&#xff0c;同时具有出色的使用体验。 开发小程序需要什么技术? 前端技术基础&#xff1a;html、js、css。具体到小程序&a…...

7个营销人员常见的社交媒体问题以及解决方法

在如今的数字营销时代&#xff0c;许多营销人员都害怕在社交媒体上犯错。他们担心他们的社交媒体中的失误会演变成一场公关危机。面对一些常见的社交媒体问题&#xff0c;您需要知道如何避免和解决。对于数字营销人员来说&#xff0c;在现在这个信息互通&#xff0c;每时每刻都…...

BFC 是什么

在页面布局的时候&#xff0c;经常出现以下情况&#xff1a; 这个元素高度怎么没了&#xff1f;这两栏布局怎么没法自适应&#xff1f;这两个元素的间距怎么有点奇怪的样子&#xff1f;...... 原因是元素之间相互的影响&#xff0c;导致了意料之外的情况&#xff0c;这里就涉及…...

全平台数据采集工具:BarrageGrab直播弹幕实时抓取解决方案

全平台数据采集工具&#xff1a;BarrageGrab直播弹幕实时抓取解决方案 【免费下载链接】BarrageGrab 抖音快手bilibili直播弹幕wss直连&#xff0c;非系统代理方式&#xff0c;无需多开浏览器窗口 项目地址: https://gitcode.com/gh_mirrors/ba/BarrageGrab 在数字直播时…...

类型擦除与部分异步编程

1. std::function&#xff1a;可调用对象的“统一调用接口”std::function 是针对可调用对象的类型擦除工具&#xff0c;其底层实现核心是「抽象基类 模板子类」的多态模式&#xff0c;也是运行时类型擦除的典型应用&#xff1a;抽象基类&#xff1a;定义了与“函数签名”完全…...

Ubuntu 22.04/20.04 RTX 3050显卡驱动安装避坑指南:从黑屏/dev/***到成功点亮

1. 为什么你的RTX 3050在Ubuntu上会黑屏&#xff1f; 刚给Ubuntu装上RTX 3050显卡&#xff0c;重启后屏幕一片漆黑&#xff0c;只显示/dev/***: clean之类的信息&#xff1f;这场景我太熟悉了——去年给工作室六台Ubuntu工作站装RTX 30系显卡时&#xff0c;每台都经历过这个&qu…...

跨平台文件同步方案:OpenClaw+Qwen3-32B智能归档系统

跨平台文件同步方案&#xff1a;OpenClawQwen3-32B智能归档系统 1. 为什么需要智能文件同步 作为一个长期在多台设备间切换工作的开发者&#xff0c;我深受文件管理混乱的困扰。Mac上的设计稿、Windows里的开发文档、Linux服务器上的日志文件——这些散落在各处的数据就像一座…...

春联生成模型-中文-base行业落地:新能源车企‘碳中和’‘智驾’等科技春联生成

春联生成模型-中文-base行业落地&#xff1a;新能源车企碳中和智驾等科技春联生成 1. 引言&#xff1a;当传统春联遇上现代科技 春节贴春联是千百年来的传统习俗&#xff0c;但传统的"福禄寿喜"已经难以完全表达现代企业的科技内涵。特别是新能源车企&#xff0c;既…...

实战指南:基于快马生成tomcat生产级配置,涵盖https、集群与性能调优

今天想和大家分享一个实战经验&#xff1a;如何在生产环境中配置Tomcat服务器。作为一个长期和Tomcat打交道的开发者&#xff0c;我深知生产环境配置和本地开发环境的巨大差异。最近在InsCode(快马)平台上实践了一套完整的配置方案&#xff0c;效果很不错&#xff0c;这里把关键…...

弦音墨影保姆级教程:解决‘米色宣纸背景不显示’‘朱砂按钮无响应’等常见问题

弦音墨影保姆级教程&#xff1a;解决‘米色宣纸背景不显示’‘朱砂按钮无响应’等常见问题 1. 引言&#xff1a;优雅水墨AI的实用指南 「弦音墨影」是一款将尖端人工智能技术与中国传统美学深度融合的视频理解与视觉定位系统。它以"水墨丹青"为视觉灵魂&#xff0c…...

低成本硬件在环方案:不用NI/dSPACE如何实现Simulink+Carsim实时仿真

低成本硬件在环方案&#xff1a;不用NI/dSPACE如何实现SimulinkCarsim实时仿真 在汽车电子和自动驾驶研发领域&#xff0c;硬件在环&#xff08;HIL&#xff09;测试是验证控制算法可靠性的关键环节。传统方案依赖NI或dSPACE等昂贵设备&#xff0c;动辄数十万的投入让中小团队望…...

嵌入式系统内存管理技术与实践

嵌入式系统内存管理的工程实践1. 嵌入式内存管理概述嵌入式系统的内存管理直接决定了系统的三个关键特性&#xff1a;稳定性、实时性和功耗表现。与通用计算系统不同&#xff0c;嵌入式环境对内存使用有着更严格的约束条件&#xff0c;这要求工程师必须掌握专业的内存管理技术。…...

告别Activity重建:用onConfigurationChanged优雅处理Android 13+的深色主题与多语言切换

告别Activity重建&#xff1a;用onConfigurationChanged优雅处理Android 13的深色主题与多语言切换 在Android 13及更高版本中&#xff0c;深色主题动态切换和多语言即时切换已成为提升用户体验的关键功能。传统方案通过重建Activity实现配置变更&#xff0c;但会导致界面闪烁、…...