В последнее время я столкнулся со многими сценариями пакетной вставки на работе, но 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. Вы можете извлечь их в соответствии с вашими потребностями. Если у вас есть какие-либо вопросы, вы можете оставить сообщение~