前言

现在,普遍的关系型数据库开发都离不开 mybatis 这个优秀的持久层框架。而在普遍的业务场景中,也时常会有短时间内高频次的增删操作。这样短时间内高频次的操作,通常有两种实现方案,第一种是比较常见的一种:在代码中编写循环,在持久层做单次的操作;另一种是通过 mybatis,直接在持久层批量操作数据。虽然 mybatis 的批量也是在内存中操作的,但它从始至终只开了一个 sqlSession ,开销会比上一个方案小很多。

具体场景

比如现在有一个业务场景:

需要在 a,b,c 三个字段都相同的情况下,不添加新纪录的同时对某个字段进行修改。

解决思路

首先,在不对表有任何更改的情况下,我试图用纯 sql 来解决问题。

sql层面,在编写业务逻辑时,是无法规避 not in 或者 not exists 的,在数据量不大的情况下,这么写是没有问题。但当表格中的数据记录上万甚至是上十万后,这样的 sql 效率就会明显下降。

那么我们就采用第二个思路,对表格做出约束限制,通过 改表+sql 的形式,解决业务问题。

解决方案

step1:对表的三个字段做多字段组合唯一约束,使表格只有这三个字段的组合,才成立唯一索引。

ALTER TABLE table_a ADD UNIQUE(a,b,c)

step2:建立批量查询语句,实现业务需求。

在开始第二步前,有两个知识点需要补充。

第一个知识点:mybatis 中的批量查询。在 mybatis 中,批量 sql 拼接操作是通过 "< foreach >" 这个标签实现的。

简单的说三个参数:collection、item、separator。

collection:值为要迭代循环的集合类型。

item:变量名,值为从迭代的对象中取出的每一个元素。

separator:拼在sql中的,每次循环得到元素的分隔符。

第二个知识点:on duplicate key update 关键字。这个关键字代表的意思是,如果遇到唯一约束字段或者主键重复的话,执行 update 操作。values()框住的字段是代表从集合元素中取值,并 update 至对应字段。

具体代码:

        insert into        table_a (a,b,c,d)        values                    (            #{item.a},            #{item.b},            #{item.c},            #{item.d}            )                on duplicate key update        a = a + 1,        b = values(b),        c = values(c)    

mybatis plus 批量更新数据_Mybatis 多字段组合唯一 并批量添加不重复数据相关推荐

  1. mysql 唯一索引出现重复数据_MySQL 创建唯一索引忽略对已经重复数据的检查

    MySQL 创建唯一索引忽略对已经重复数据的检查 在创建唯一索引的基础上加上关键字"IGNORE "即可. # 重复数据 mysql> select aid,count(ai ...

  2. excel删除重复数据保留一条_Excel怎么快速查找和删除重复数据

    我们用excel表格记录了大量的数据,当要做数据整理时候发现很多重复数据,那么怎么筛选删除呢? ---------------------------------------------------- ...

  3. springboot批量更新实体_mybatis+mysql+springboot批量插入,批量更新数据

    在开发过程中都会遇到批量的插入或者是更新数据,本人只写了一下自己在做的过程中遇到问题,写此篇文章的作用:第一是记录自己在工作过程中的问题.第二是方便同行的伙伴们避免出现这样的问题消耗太多的时间.废话不 ...

  4. 批量修改/批量更新数据库某一个字段的值

    用字符串替换函数replace update 表名 set 字段名 = replace(字段名,'http://zencart.me','zencart.me')replace(url, 'aaa', ...

  5. 删除表格数据后自动刷新_表格中一键即可删除重复数据,你居然还用逐条排查?...

    平时用表格处理大量数据的时候,总会遇到大量的重复无效数据. 如果只有几十条数据,也就罢了,一条一条比对,很快也能清理完,可是如果数据多达上百条,甚至成千上万条,还是去一条一条筛选,那得排查到过年了. ...

  6. 【Excel】统计不重复数据的个数,设置单元格不允许出现重复数据

    前篇文章我们介绍了一下Excel中如何设置数据有效性以及COUNTIF函数的用法,这篇文章主要介绍有重复数据时如何统计不重复数据的个数以及通过数据有效性去设置单元格不允许出现重复数据. 统计单列不重复 ...

  7. html 刷新表格数据,当我刷新页面时在html表格上重复数据

    我从数据库中选择一些数据,并试图在html表格上显示它们. 问题是,当我刷新页面时,我得到了所有在我的html表上重复的数据.我一直试图谷歌/解决这个问题,但三天没有结果.当我刷新页面时在html表格 ...

  8. python对es数据库使用bulk批量更新文档某字段的值

    """ 批量写入数据 """# 按照步长分批插入数据库,缓解插入数据库时的压力length = len(json_list)step = 2 ...

  9. linux批量更新文件夹里,Linux下使用touch批量修改文件夹和文件的时间

    发布时间:2015-07-26 22:51:41 下面只有两个参数存在差别,......[阅读全文] 阅读(3186) | 评论(0) | 转发(0) 发布时间:2015-06-19 17:25:38 ...

最新文章

  1. mysql 远程连接速度慢的解决方案
  2. 推荐一位互联网领域的达人,可以工作、生活、写书三不误!
  3. C语言 数据结构 链表的增删查改
  4. mysql setinc_数据库自增自减——setInc、setDec
  5. 错误消息 This computer doesn‘t have VT-X/AMD-v enabled
  6. 相机矩阵(Camera Matrix)
  7. Java pdf文件传输_java中pdf文件的管理(pdf文件转png文件,base64传输文件以及删除)...
  8. .net 任务(Task)
  9. Processing 闪烁的圆 动画效果
  10. HTML 5 input placeholder 属性
  11. 关于AM335X移植SDIO WIFI的简易教程(转)
  12. 英语口语练习软件测试简历,软件测试员英语简历范文
  13. 如何优化网站的响应时间
  14. python爬虫实例100例-Python爬虫 实例
  15. 任正非自称不如钱伯斯!钱伯斯究竟是何许人?
  16. 北航大学计算机学院新媒体艺术系,本科优秀毕业论文参考-北航新媒体与艺术学院-北京航空航天大学.doc...
  17. SQLServer安装程序无法打开注册表项 UNKNOWN\Components\…的问题
  18. VMBox挂载共享文件时可能出现的问题以及对应的解决办法
  19. [开发工具] STM32算法的翅膀之MATLAB
  20. iOS 刻度尺、iOS 测量尺、iOS开发可移动的尺子、纯代码实现

热门文章

  1. java JDK8 学习笔记——第13章 时间与日期
  2. 在JSP中常见问题,防止SpringMVC拦截器拦截js等静态资源文件的解决方案
  3. 怎样在xcode5中使用低版本sdk,解决兼容ios7ui问题
  4. 在你做推荐系的过程中都遇到过什么坑?
  5. 1024程序员节:心疼被段子手黑得最惨的你们
  6. Facebook广告营销的6个方法经验分享
  7. Star Schema完全参考手册学习笔记九
  8. Python之快速排序算法实现(二)
  9. 欢迎访问我的Github
  10. Typora使用指南以及各种小技巧