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------常用注解以及设置统一前缀以及主键生成策略(六) 在使用MybatisPlus的过程中时,实力类的Mapper继承BaseMapper,此时不要添加TableName注解也能够对表数据实现增删改查。 // mybatispuls 提供了接口实现单表的增…...
JQuery工具框架
JQuery工具框架 直接使用js编程比较麻烦,而且还必须考虑浏览器的差异性。 为了简化javascript的开发,一些javascript库诞生了。当今流行的javascript库有:jQuery诞生于2005 年,Dojo、 EXT_JS、DWR、YUI… jQuery是John Resig在…...
同一个整型常量怎样在不同进制间之间转换?
整型常量可以分别用二进制、八进制、十进制和十六进制表示,不同的进制并不影响数据本身的大小,同一个整型常量可以在不同进制之间转换,具体转换方式如下。1.十进制和二进制之间的转换(1)十进制转二进制。十进制转换成二进制就是一个除以2取余…...
UVa 225 Golygons 黄金图形 暴力搜索 剪枝 状态判断
题目链接:Golygons 题目描述: 给定nnn和kkk个障碍物的坐标,你需要走nnn次,第一次走一个单位距离,第二次走二个单位距离,…,第nnn次走nnn个单位距离。走得过程中不能穿过或者到达障碍物所在的点&…...
PowerShell中的对象是神马?
在PowerShell中,无处不在体现出一个概念,这个概念是什么呢?就是对象,对象是面向对象的语言中非常重要的概念,PowerShell的底层是.net,也是面向对象的语言,因此它也继承了面向对象的语言的语法特性。但是很多人在使用PowerShell 语言的时候会觉得有些疑惑,到底什么是Pow…...
Proxy lab
CSAPP Proxy Lab 本实验需要实现一个web代理服务器,实现逐步从迭代到并发,到最终的具有缓存功能的并发代理服务器。 Web 代理是充当 Web 浏览器和终端服务器之间的中间人的程序。浏览器不是直接联系终端服务器获取网页,而是联系代理&#x…...
【机器学习】Sklearn 集成学习-投票分类器(VoteClassifier)
前言 在【机器学习】集成学习基础概念介绍中有提到过,集成学习的结合策略包括: 平均法、投票法和学习法。sklearn.ensemble库中的包含投票分类器(Voting Classifier) 和投票回归器(Voting Regressor),分别对回归任务和分类任务的…...
Day892.MySql读写分离过期读问题 -MySQL实战
MySql读写分离过期读问题 Hi,我是阿昌,今天学习记录的是关于MySql读写分离过期读问题的内容。 一主多从架构的应用场景:读写分离,以及怎么处理主备延迟导致的读写分离问题。 一主多从的结构,其实就是读写分离的基本…...
无线蓝牙耳机哪个品牌音质好?性价比高音质好的蓝牙耳机排行榜
其实蓝牙耳机购买者最担忧的就是音质问题,怕拿到手的蓝牙耳机低频过重又闷又糊,听歌闷耳的问题,但从2021年蓝牙技术开始突飞猛进后,蓝牙耳机的音质、连接甚至是功能都发生了很大的变化,下面我分享几款性价比高音质的蓝…...
店铺微信公众号怎么创建?
有些小伙伴问店铺微信公众号怎么创建,在解答这个问题之前,先简单说说店铺和微信公众号关系: 店铺一般是指小程序店铺,商家通过小程序店铺来卖货;微信公众号则是一个发布信息的平台。但是两者之间可以打通,…...
goLang Mutex用法案例详解
Golang以其并发性Goroutines而闻名。不仅是并发,还有更多。 因此,在这种情况下,我们必须确保多个goroutines不应该同时试图修改资源,从而导致冲突。 为了确保资源一次只能被一个goroutine访问,我们可以使用一个叫做sync.Mutex的东西。 This concept is called mutual ex…...
java常见的异常
异常分类 Throwable 是java异常的顶级类,所有异常都继承于这个类。 Error,Exception是异常类的两个大分类。 Error Error是非程序异常,即程序不能捕获的异常,一般是编译或者系统性的错误,如OutOfMemorry内存溢出异常等。 Exc…...
从0开始学python -33
Python3 输入和输出 -1 在前面几个章节中,我们其实已经接触了 Python 的输入输出的功能。本章节我们将具体介绍 Python 的输入输出。 — 输出格式美化 Python两种输出值的方式: 表达式语句和 print() 函数。 第三种方式是使用文件对象的 write() 方法ÿ…...
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应用程序,可视化地构建和启动web程序,而我们为您创建新代码。 从信息开始 连接到数据库。Radzen推断您的信息并生成一个功能完备的web应用程序。支持MSSQL REST服务。 微调 添加页面或编辑生…...
分享7个比B站更刺激的老司机网站,别轻易点开
俗话说摸鱼一时爽,一直摸一直爽,作为一个程序员老司机了,一头乌黑浓密的头发还时不时被同事调侃,就靠这10个网站让我健康生活,不建议经常性使用,因为还有一句俗话,那就是“摸鱼一时爽࿰…...
浅析:如何在Vue3+Vite中使用JSX
目录 0. Vue3,Vite,JSX 三者的关系 JSX介绍 在 Vue3 中使用 JSX 安装插件(vitejs/plugin-vue-jsx) 新建 jsx 文件 语法 补充知识:注意事项 0. Vue3,Vite,JSX 三者的关系 Vue3、Vite 和 …...
开发小程序需要什么技术?
小程序是一种新的开发能力,相比于原生APP 开发周期短,开发者可以快速地开发一个小程序。小程序可以在微信内被便捷地获取和传播,同时具有出色的使用体验。 开发小程序需要什么技术? 前端技术基础:html、js、css。具体到小程序&a…...
7个营销人员常见的社交媒体问题以及解决方法
在如今的数字营销时代,许多营销人员都害怕在社交媒体上犯错。他们担心他们的社交媒体中的失误会演变成一场公关危机。面对一些常见的社交媒体问题,您需要知道如何避免和解决。对于数字营销人员来说,在现在这个信息互通,每时每刻都…...
BFC 是什么
在页面布局的时候,经常出现以下情况: 这个元素高度怎么没了?这两栏布局怎么没法自适应?这两个元素的间距怎么有点奇怪的样子?...... 原因是元素之间相互的影响,导致了意料之外的情况,这里就涉及…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
