业务代码:
IGroupMemberIndexOper oper = session.getMapper(IGroupMemberIndexOper.class); oper.saveGroupMemberIndex(indexDOList); |
mapper:
<insert id="saveGroupMemberIndex" parameterType="List" useGeneratedKeys="true" keyProperty="id"> INSERT INTO `t_group_member_index` (gid, uid, msg_id) VALUES <foreach collection="list" item="item" index="index" separator=","> (#{item.gid}, #{item.uid}, #{item.msgId}) </foreach> </insert> |
使用foreach来批量插入数据,使用wireshark抓包观察:
逐包分析:
304:select1
305:成功
306:SET autocommit=0
307:成功
308:select
@@session.tx_read_only
309:成功
310:执行insert
从抓包可以看出,mybatis的foreach,是将sql拼接了,从而实现一次网络交互批量查询,减少了网络交互次数,从而提高性能。
311:是一个异常信息,这里不去分析了