美文网首页
mybatis 批量操作

mybatis 批量操作

作者: 旋涡_宫城 | 来源:发表于2019-11-19 17:07 被阅读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);

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

    都是一些日常总结,

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

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

    相关文章

      网友评论

          本文标题:mybatis 批量操作

          本文链接:https://www.haomeiwen.com/subject/puhgictx.html