【Mybatis-plus】Mybatis-plus的踩坑日记之速查版

news2024/12/25 9:29:23

【Mybatis-plus】Mybatis-plus踩坑日记之速查版

  • 开篇词:
  • 干货篇:
      • 1.@TableField(fill = FieldFill.INSERT_UPDATE)的错误使用
      • 2.采用MybatisPlus自带update方法,但无法更新null的问题
      • 3.表字段为json类型的入库问题
      • 4.字段忽略未生效
      • 5.自带id生成策略数值溢出问题
      • 6.@TableLogic 对于 CIUD 的限制
          • 插入(insert)
          • 查找(select)
          • 更新(update)
          • 删除(delete)
  • 总结篇:
  • 我是杰叔叔,一名沪漂的码农,下期再会!

开篇词:

这期给大家分享一个关于 MyBatis-plus 的踩坑实录,这两年的血与泪的教训呀~~在这里插入图片描述

干货篇:

1.@TableField(fill = FieldFill.INSERT_UPDATE)的错误使用

在进行数据插入或者更新时候,想必大家都会用到这个注解来自动刷db表的创建人,创建时间,更新人,更新时间。在这里插入图片描述
然后大家都会自定义上面这个handler去处理具体刷的一些细节。

但是切记!!!

使用‘FieldFill.INSERT_UPDATE’时,如果想实现[创建人,创建时间,更新人,更新时间]同时刷db,一定要在把所有field的set语句都写在重写的insetFill方法内
在这里插入图片描述

2.采用MybatisPlus自带update方法,但无法更新null的问题

Mybatis-plus封装的一些方法,会进行空值的判断,如果该值为空则会不修改这个值,如何实现传的是空就改为空。

解决方法:
实体类属性的@TableField注解上加入以下属性,可以在修改时不进行null值判断

@TableField(value = "name", updateStrategy = FieldStrategy.IGNORED)
private String name;

但是这种改法会产生一个衍生问题:在做逻辑删除的时候,前端只穿一个ID但是我又不能把数据都置为空值

解决方法:

 UpdateWrapper<TarchDepart> tarchDepartWrapper = new UpdateWrapper<>();
 tarchDepartWrapper.eq("departId", dto.getDepartId()).set("delFlag", 1);
 tarchDepartService.update(tarchDepartWrapper);

同理:实体类属性的@TableField注解加了以上属性后,在做只改一个或几个字段时的业务(如:生效,失效,逻辑删除)都可用上述方法。

3.表字段为json类型的入库问题

当数据库字段有json类型的时候,记得和表映射的entity实体中对应field添加typeHandler,如下图所示:
在这里插入图片描述

4.字段忽略未生效

项目中实体使用的Lombok,类中只加了@Data和@Builder注解,实体类加了忽略字段注解

@TableField(exist = false),但是未生效,查询过程报数组下标越界异常。
解决方法:
这个注解需要在实体类加上无参构造函数才能生效

5.自带id生成策略数值溢出问题

COULD NOT SET PROPERTY 'ID' OF 'CLASS COM.XXX.USER' WITH VALUE '1037678924715731598' CAUSE: JAVA.LANG.ILLEGALARGUMENTEXCEPTION: ARGUMENT TYPE MISMATCH

如果没有指定ID生成策略,mybatis-plus默认是使用自己随机的ID生成策略,会生成一个比较大的数,可能会大小溢出。

解决方法:

在实体类ID字段上加上注解 @TableId(type = IdType.AUTO),使用数据库的自增策略。

public class UserPO {
    @TableId(type= IdType.AUTO)
    private Long id;
}

6.@TableLogic 对于 CIUD 的限制

插入(insert)

不作限制

查找(select)

@TableLogic 注解将会在 select 语句的 where 条件添加条件,过滤掉已删除数据

且使用 wrapper.entity 生成的 where 条件会忽略该字段

SELECT user_id,name,sex,age,deleted FROM user WHERE user_id=1 AND deleted='0'
更新(update)

@TableLogic 注解将会在 update 语句的 where 条件后追加条件,防止更新到已删除数据
且使用 wrapper.entity 生成的 where条件会忽略该字段

update user set deleted=1 where id = 1 and deleted=0
删除(delete)

@TableLogic 注解会将 delete 语句转变为 update 语句

update user set deleted=1 where id = 1 and deleted=0

注意使用边界:

(1)逻辑删除是为了方便数据恢复和保护数据本身价值等等的一种方案,但实际就是删除。

(2)如果你需要频繁查出来看就不应使用逻辑删除,而是以一个状态去表示。

总结篇:

MyBatis-Plus 是 MyBatis 的增强工具,通过提供丰富的功能和简洁的 API,极大地简化了数据库操作,提高了开发效率。它特别适合快速开发、简化 CRUD 操作等场景。

然而,对于复杂的业务逻辑和查询,可能还需要结合 MyBatis 的 XML 方式进行自定义 SQL 编写。
在这里插入图片描述

虽好用,勿贪杯哦~~

在这里插入图片描述

我是杰叔叔,一名沪漂的码农,下期再会!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2059124.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RabbitMQ中消息的分发策略

我的后端学习大纲 RabbitMQ学习大纲 1.不公平分发&#xff1a; 1.1.什么是不公平分发&#xff1a; 1.在最开始的时候我们学习到 RabbitMQ 分发消息采用的轮训分发&#xff0c;但在某种场景下这种策略并不是很好&#xff0c;比方说有两个消费者在处理任务&#xff0c;其中有个…

基于vue全家桶的pc端仿淘宝系统_kebgy基于vue全家桶的pc端仿淘宝系统_kebgy--论文

TOC springboot478基于vue全家桶的pc端仿淘宝系统_kebgy基于vue全家桶的pc端仿淘宝系统_kebgy--论文 绪 论 1.1开发背景 改革开放以来&#xff0c;中国社会经济体系复苏&#xff0c;人们生活水平稳步提升&#xff0c;中国社会已全面步入小康社会。同时也在逐渐转型&#xf…

【中项第三版】系统集成项目管理工程师 | 第 15 章 组织保障

前言 本章的知识点预计上午会考1-2分&#xff0c;下午可能会考&#xff0c;一般与其他管理领域进行结合考查。学习要以教材为主。 目录 15.1 信息和文档管理 15.1.1 信息和文档 15.1.2 信息&#xff08;文档&#xff09;管理规则和方法 15.2 配置管理 15.2.1 基本概念 …

web渗透测试 学习导图

web渗透学习路线 前言 一、web渗透测试是什么&#xff1f; Web渗透测试分为白盒测试和黑盒测试&#xff0c;白盒测试是指目标网站的源码等信息的情况下对其渗透&#xff0c;相当于代码分析审计。而黑盒测试则是在对该网站系统信息不知情的情况下渗透&#xff0c;以下所说的Web…

测绘程序设计|初识C#编程语言|C#源码结构|面向对象|MFC、WinFrom与WPF

由于微信公众号改变了推送规则&#xff0c;为了每次新的推送可以在第一时间出现在您的订阅列表中&#xff0c;记得将本公众号设为星标或置顶喔~ 根据笔者经验&#xff0c;分享了C#编程语言、面向对象以及MFC、WinForm与WPF界面框架相关知识~ &#x1f33f;前言 c#作为测绘程序…

微信小程序SSL证书申请重点和方法

微信小程序运行模式主要在手机微信内&#xff0c;这一套程序可以解决了用户注册账户及支付相关问题&#xff0c;另外使用很方便&#xff0c;用户不用特意的去安装小程序&#xff0c;只要在微信里面就可以开发&#xff0c;只因为这样微信小程序很受欢迎。 对于开发者来说&#…

车企数据治理实践:业务场景为抓手势在必行

在这个信息爆炸的时代&#xff0c;数据已经成为推动企业发展的核心动力&#xff0c;而数据治理则是确保数据价值得以最大化发挥的关键。在整车制造的研发、生产及供应链业务中&#xff0c;数据治理扮演着举足轻重的角色。 数据治理对于提升数据质量至关重要。高质量的数据是企…

elemeUI中table的列内容宽度不够时的省略号如何去掉

在外层套个div来解决 <div><el-input-number class"no-ellipsis" style"width: 88px;" size"small" controls-position"right" v-model{scope.row.supplied_area}></el-input-number> </div>

Java中优化大量数据导出到Excel的内存消耗(三):边读边写

优化大量数据导出到Excel的内存消耗&#xff08;二&#xff09;&#xff1a;如果数据超出Excel单表上限&#xff0c;则进行分表_txt导入excel超出最大行如何自动分表-CSDN博客 数据导出进行边读边写excel方式导出 DataSource dataSource dataSourceService.getByDsName(reque…

二手车交易系统功能案例分析

一、系统概述 二手车交易系统旨在连接卖家与买家&#xff0c;提供车辆信息发布、搜索、评估、交易、支付及售后服务等一站式解决方案。该系统需具备高度的可扩展性、稳定性和安全性&#xff0c;以满足日益增长的市场需求。 二、核心功能分析 1. 车辆信息发布与管理 功能描述…

三维坐标的旋转矩阵转换测试Demo(ROS1 RVIZ)

已知空间上的某一个点P在坐标系1下的位置为 P1&#xff08;1,2,3&#xff09;&#xff0c;需要求出P在三维空间坐标系0之间的相对关系&#xff0c;其中坐标系1是相对于坐标系0绕着x轴旋转60度后转化。示意如下图 程序设计 定义P点在坐标系1下的位置 array np.array([1,2,3…

vscode开发android ndk的环境配置

vscode开发android ndk的环境配置 最近公司新需求&#xff0c;要求用C/C实现部分核心代码&#xff0c;打包成静态库跨平台&#xff08;Android和iOS&#xff09;使用。 作为Android开发出身的C/C老白程序员兴奋不已&#xff08;又可以开心的学习niubility的C/C了&#xff09;&…

SpringCloudAlibaba基础七-2 seata的使用

一 Seata 是什么 Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和XA 事务模式&#xff0c;为用户打造一站式的分布式解决方案。AT模式是阿里首推的模式,阿里云上有商用版本的GTS&#x…

pycharm创建文件自动生成文件头信息

pycharm创建文件自动生成文件头信息 1、设置步骤 file -> settings->Editor->File and Code Templates->Python Script 2、pycharm预定义的变量&#xff08;小写无效&#xff09; ${PROJECT_NAME}:项目名称${PRODUCT_NAME}:集成开发环境${NAME}:文件名${USER…

高效工作与持续学习:程序员如何平衡成长与编码任务?

在当今瞬息万变的技术世界中&#xff0c;程序员面临着前所未有的挑战和机遇。随着项目复杂性的增加和新技术的层出不穷&#xff0c;如何在繁忙的日常编码任务与自我提升之间找到平衡&#xff0c;已成为许多程序员心中的困惑。这不仅关乎职业生涯的发展&#xff0c;更关系到个人…

Transformer系列-3丨BERT模型和代码解析

1 前言 前面两篇文章&#xff0c;笔者从网络结构和代码实现角度较为深入地和大家解析了Transformer模型和Vision Transformer模型&#xff08;ViT&#xff09;&#xff0c;其具体的链接如下&#xff1a; 基础Transformer解析 ViT模型与代码解析 本期内容&#xff0c;笔者想…

贪心+构造,CF 1592F1 - Alice and Recoloring 1

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1592F1 - Alice and Recoloring 1 二、解题报告 1、思路分析 操作2、3可以…

C++系列-多态的基本语法

多态的基本语法 多态的含义静态多态动态多态 多态的底层原理多态中的final和overridefinaloverride: 多态的应用和优点计算器简单实现电脑组装的实现 《游山西村》 南宋陆游 莫笑农家腊酒浑&#xff0c;丰年留客足鸡豚。 山重水复疑无路&#xff0c;柳暗花明又一村。 箫鼓追…

leetcode118. 杨辉三角,老题又做

leetcode118. 杨辉三角 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows 1…