最近工作上遇到很多批量插入的场景,但是百度很难得到我想要的结果,而且查出来的效果不是很好~ 所以就自己来写一份给大家参考,希望对大家有用
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 批量查询xml形式
<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批量操作经常使用的部分,大家可以根据需要自行提取,如果有什么问题可以留言哈~