【ORM】Mybatis多字段组合唯一并批量添加数据

【ORM】Mybatis多字段组合唯一并批量添加数据

2023年7月20日发(作者:)

【ORM】Mybatis多字段组合唯⼀并批量添加数据前⾔现在,普遍的关系型数据库开发都离不开 mybatis 这个优秀的持久层框架。⽽在普遍的业务场景中,也时常会有短时间内⾼频次的增删操作。这样短时间内⾼频次的操作,通常有两种实现⽅案,第⼀种是⽐较常见的⼀种:在代码中编写循环,在持久层做单次的操作;另⼀种是通过 mybatis,直接在持久层批量操作数据。虽然mybatis 的批量也是在内存中操作的,但它从始⾄终只开了⼀个 sqlSession ,开销会⽐上⼀个⽅案⼩很多。具体场景⽐如现在有⼀个业务场景:需要在 a,b,c 三个字段都相同的情况下,对⽐ d 字段,在⼀定条件下,取出⼀条记录(⼀整条)。解决思路⾸先,在不对表有任何更改的情况下,我试图⽤纯 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)

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689824844a288927.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信