mybatis 批量操作

2019-11-19  本文已影响0人  旋涡_宫城

一些时候需要将一些数据批量的进行操作,比如:根据ids批量查询、更新、删除、将一个集合的数据插入数据库。简单的操作是单条的循环遍历后执行对应的操作。稍微有点经验的程序员往往都是偷懒的,有没有批量的操作方法,答案是肯定的,mybatis 提供了<foreach> 的标签。

开发者可以通过在Mapper中定义一个方法:

 int insertBatch(List<Student> list)

然后在xml中使用foreach循环处理,让mybatis 帮助我们批量生成sql的预处理语句。

<insert id="insertBatch" parameterType="list" >

  insert into tb_student ( name,age)

 values

<foreach collection="list" item="item" index="index" separator=",">

  ( #{item.name,jdbcType=VARCHAR}, #{item.age,jdbcType=INTEGER})

</foreach>

</insert>

foreach元素的属性主要有 item,index,collection,open,separator,close。

    item表示集合中每一个元素进行迭代时的别名,

    index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,

    open表示该语句以什么开始,

    separator表示在每次进行迭代之间以什么符号作为分隔 符,

    close表示以什么结束。

collection属性这个比较容易出现问题,大部分情况下我们使用list传入,但也有其它的写法

1. 方法定义为 queryListByIds(@Param("ids") List ids)

这时应写为<foreach collection="ids"  ...>

2. 方法定义为 queryListByIds(int[] ids),这里是传入一个数组

这时应写为<foreach collection="array" ...> 

3.当方法传入map时,map的value有一个集合

这时应写为:

<select id="selectByNameAndIds" resultType="map">

        select name,age from student where name  =#{name} and id in

         <foreach collection="ids" index="index" item="item" open="(" separator="," close=")">

              #{item}

         </foreach>

    </select>

上述collection的值为ids,是传入的参数Map的key,对应的Mapper代码:

public Map selectByNameAndIds(Map params);

-----------------

都是一些日常总结,

如果您觉得有帮助的话,记得 评论,关注,转发,收藏,双击么么哒。

-----------------

上一篇下一篇

猜你喜欢

热点阅读