Mybatis批量操作

  • 概要

在对数据库表进行批量数据的操作,为了提高操作进行数据的批量化操作很有必要。因为批量化操作数据是作为一名后端开发人员需要掌握的技术之一。在mybatis中批量化操作用foreach,包括foreach批量操作之增、删、改

传入的参数为List类型,在Mybatis中设置 parameterType="list"

  • foreach批量删除

<delete id="delete" parameterType="list">
 delete from tableName where guid in
<foreach item="item" collection="list" open="(" separator="," close=")">
        #{item}
   </foreach>
</delete>
  • foreac批量新增

注意:foreach内用()括起来插入的值open="(" separator="," close=")"没有设置(不设置的原因待研究)。item值的确定为传入list的条数据的key值。建议传入的List用bean来对数据进行封装。


<insert id="save" parameterType="list">        
insert into tableName(field,field,field,field,field) values               
  <foreach item="item" collection="list" separator="," >      
     (#{item.name},#{item.name},#{item.name},#{item.name}, {item.name})                                   
  </foreach> 
</insert>
  • List的其他类型数据新增

循环批量新增一个参数,附带有bean类型的数据。注意在xml文件里面设置

parameterType="map",例如以下通过@Param设置。
int addDeviceItem(@Param("devItem")DeviceModelItem deviceModelItem, @Param("devIds")List<String> deviceIds);

另外还可以在java文件里面构造map可以实现同样的效果

Map<String,Object> paramMap=new HashMap<>();
paramMap.put("devItem",deviceModelItem);
paramMap.put("devIds",deviceIds);
在接口文件中
int addDeviceItem(Map<String,Object> paramMap);

xml文件访问list和bean的参数,item为我们循环的参数,注意循环中指向的List列表collection="devIds"。调用bena类型时要加上我们设置的名称devItem.field。

 <insert id="addDeviceItem" parameterType="map">
        insert into tableName(field,field,field,field) values
        <foreach collection="devIds" item="item" separator=",">
            (#{item},#{devItem.field},#{devItem.field},#{devItem.field})
        </foreach>
    </insert>
  • foreach批量修改

简单的数据的修改,同批量删除类似。多字段修改参考批量新增。


<update id="sendCommand" parameterType="list">
    update tableName t set t.state=1 where t.guid in
   <foreach item="item" collection="list" open="(" separator=","     close=")">
          #{item}
  </foreach>
</update>
  • 批量查询

简单的单字段批量查询:

 select * from tableName where guid in
<foreach item="item" collection="list" open="(" separator="," close=")">
        #{item}
 </foreach>

多字段批量查询

select field4 from user where(field1,field2,field3) in 
<foreach item="item" collection="list" open="(" separator=","close=")">
          (#{item.field1},#{item.field2},#{item.field3}),
</foreach>

版权声明:
作者:Gomo
链接:https://www.develophm.com/index.php/mybatis%e6%89%b9%e9%87%8f%e6%93%8d%e4%bd%9c/105/
来源:开发之家
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>