MySQL批量操作-笔记

一. 配置

首先,mysql需要数据库连接配置&allowMultiQueries=true

jdbc.url=jdbc:mysql://mbp-mysql-xm01:5002/xmppsc?autoReconnect=true&useUnicode=true&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true

二. 批量操作

2.1. 事例

@Insert("insert into msg_inbox (`user_uid`,`pub_uid`,`msg_id`,`state`,`cts`,`uts`,`latest`,`source`) values " +
            "<foreach collection='items' index='index' item='item' open='(' separator='),(' close=')'>" +
            "#{item.user_uid},#{item.pub_uid},#{item.msg_id},#{item.state},#{item.cts},#{item.uts},#{item.latest},#{item.source}" +
            "</foreach>")
void batchInsert(@Param("items")List<MsgInbox> items);

 

@Update("update msg_inbox set latest=0 where (pub_uid,user_uid) in " +
            "<foreach collection='items' index='index' item='item' open='((' separator='),(' close='))'>" +
            "#{item.pub_uid},#{item.user_uid}" +
            "</foreach> and latest=1")
void clearSessions(@Param("items")List<MsgInbox> items);

 

@Update("<foreach collection='items' index='index' item='item' open='' separator=';' close=''>" +
            "update article set uts=#{item.uts}, read_num=#{item.read_num} where hash=#{item.hash} and read_num &lt; #{item.read_num}" +
            "</foreach>")
void updateReadNumListNumByHash(@Param("items")List<Article> items);

 

2.2. foreach

foreach的主要作用是在构建in条件中,它可以在SQL语句中进行迭代一个集合。

foreach元素的属性主要有:collection,index,item,open,separator和close,意义如下:

意义
collection需要操作的集合
index指定一个名字,用于表示在迭代过程中,每次迭代到的位置
item表示集合中每一个元素进行迭代时的别名;
open表示该语句以什么开始
separator表示在每次进行迭代之间以什么符号作为分隔符
close表示以什么结束

在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况 下,该属性的值是不一样的,主要有一下3种情况: 

1. 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list 
2. 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array 
3. 如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,在breast里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key

三.注意

批量操作时,需要生成一段很长的操作语句,而语句过长时,会出现错误。

所以当有上万条批量操作时,要注意这一点。

 

参考:mybatis批量操作

 

转载于:https://www.cnblogs.com/endstart/p/6703648.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值