转载

Mybatis批量插入更新xml方式与注解方式

最近工作上遇到很多批量插入的场景,但是百度很难得到我想要的结果,而且查出来的效果不是很好~ 所以就自己来写一份给大家参考,希望对大家有用

Mybatis 批量插入注解形式

@Insert("<script> INSERT INTO t_device_policy "
            + "(id,device_id,type,policy,create_time,update_time) "
            + "VALUES "
            + "<foreach collection = 'list' item='list' separator=',' > "
            + " (#{list.id},#{list.deviceId},#{list.policyType},#{list.policy},#{list.createTime},#{list.updateTime}) "
            + "</foreach>"
            + "</script>")
    int insert(@Param(value = "list")List<DevicePolicy> list);
复制代码

Mybatis 批量插入主键存在更新注解形式

@Insert("<script> INSERT INTO t_device_policy "
         + "(id,device_id,type,policy "
         + "VALUES "
         + "<foreach collection = 'list' item='list' separator=',' > "
         + " (#{list.id},#{list.deviceId},#{list.policyType},#{list.policy}) "
         + "</foreach>"
         + "ON DUPLICATE KEY "
         + "UPDATE policy = VALUES(policy)"
         + "</script>")
 int insert(@Param(value = "list")List<DevicePolicy> list);
复制代码

ON DUPLICATE KEY的使用场景大家知道吗?

当你设计的数据库表中的主键存在时更新对应的字段,不存在则插入。

还有一种情况就是你设计的唯一主键存在时更新对应的字段,不存在则插入。

大家可以根据自己的场景看是否需要该字段~

Mybatis 批量更新注解形式

@Update({"<script>" +
            "<foreach collection=/"list/" item=/"item/" separator=/";/">" +
            " UPDATE t_student" +
            "   <set> " +
            "       c_state = #{item.State}, " +
            "   </set>" +
            "   <where> " +
            "       c_id = #{item.id} " +
            "   </where>" +
            " </foreach> " +
            "</script>"})
    void updateStudentState(@Param(value = "list") List<Student> list);
复制代码

Mybatis 批量插入xml形式

<insert id="batchAdd" parameterType="java.util.List">
      INSERT INTO t_student(uid,student_id,study_days)
      VALUES
      <foreach collection="list" item="item" index="index" separator=",">
          (#{item.uid},#{item.studentId},#{item.studyDays})
      </foreach>
  </insert>
复制代码

Mapper中的方法为

void batch(List<StudentPo> po)
复制代码

Mybatis 批量插入主键更新xml形式

<insert id="batchAdd" parameterType="java.util.List">
       INSERT INTO t_student(uid,student_id,study_days)
       VALUES
       <foreach collection="list" item="item" index="index" separator=",">
           (#{item.uid},#{item.studentId},#{item.studyDays})
       </foreach>
       ON DUPLICATE KEY UPDATE
       update_time = now()
   </insert>
复制代码

Mapper中的方法为

void batch(List<StudentPo> po)
复制代码

总结

以上为Mybatis批量操作经常使用的部分,大家可以根据需要自行提取,如果有什么问题可以留言哈~

原文  https://juejin.im/post/5ddb49285188257353094a47
正文到此结束
Loading...