MyBatis Batch Insert Update XML-метод и метод аннотации

задняя часть

В последнее время я столкнулся со многими сценариями пакетной вставки на работе, но Baidu трудно получить желаемые результаты, и результаты не очень хорошие~ Поэтому я напишу копию для вашей справки, надеюсь, она будет вам полезна.

Форма аннотации пакетной вставки 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)

XML-форма пакетного запроса Mybatis

   <select id="select" resultType="com.seewo.app.calendar.dao.po.FestivalContentPo">
       select * from table where festival in
       <foreach collection="list" item="festival" index="index" open="(" close=")" separator=",">
           #{festival}
       </foreach>
   </select>

Суммировать

Выше приведены части, которые часто используются в пакетных операциях Mybatis. Вы можете извлечь их в соответствии с вашими потребностями. Если у вас есть какие-либо вопросы, вы можете оставить сообщение~