Mybatis 批量增加insert
方法一:foreach
容易出现的错误:出现SQL语句错误
解决方式: 在数据库的连接url后添加allowMultiQueries=true(允许批量更新)
jdbc.url=jdbc:mysql://localhost:3306/mybatis?allowMultiQueries=true
例子:
xml文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.center.manager.mapper.FundMapper"> <insert id="insertForeach" parameterType="java.util.List" useGeneratedKeys="false"> insert into fund ( id,fund_name,fund_code,date_x,data_y,create_by,create_date,update_by,update_date,remarks,del_flag) <foreach collection="list" item="item" index="index" separator=","> values ( #{item.id}, #{item.fundName},#{item.fundCode},#{item.dateX},#{item.dataY},#{item.createBy}, #{item.createDate},#{item.updateBy},#{item.updateDate},#{item.remarks},#{item.delFlag} ) </foreach> </insert> </mapper>
mapper层
package com.center.manager.mapper; import java.util.List; import org.apache.ibatis.annotations.Mapper; import com.center.manager.entity.Fund; @Mapper public interface FundMapper { int insertForeach(List<Fund> list); }
Fun类
package com.center.manager.entity; import java.util.Date; @data public class Fund { private String id; private String fundName; private String fundCode; private String dateX; private String dataY; private String remarks; private String createBy; private Date createDate; private String updateBy; private Date updateDate; private String delFlag; }
方法二:
Mybatis内置的ExecutorType有3种,默认的是simple,该模式下它为每个语句的执行创建一个新的预处理语句,单条提交sql;而batch模式重复使用已经预处理的语句,
并且批量执行所有更新语句,显然batch性能将更优;
service层
@Autowired private SqlSessionTemplate sqlSessionTemplate; public void add(List<ApplyInfo> list) { SqlSession sessionn = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH,false); AddInfoDap mapper = session.getMapper(AddInfo.class); for(int i = 0; i < list.seize ; i++) { mapper.addApplicationDetail(lisr.get(i)); if(i == list.size()-1) { session.commit(); session.close(); } } }
xml层
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.center.manager.mapper.FundMapper"> <insert id="addApplicationDetail" parameterType="com.dao.entity.ApplyInfo" > insert into fund ( id,fund_name,fund_code,date_x,data_y,create_by,create_date,update_by,update_date,remarks,del_flag) values ( #{item.id}, #{item.fundName},#{item.fundCode},#{item.dateX},#{item.dataY},#{item.createBy}, #{item.createDate},#{item.updateBy},#{item.updateDate},#{item.remarks},#{item.delFlag} ) </foreach> </insert> </mapper>
mapper层
void addApplicationDetail(ApplyInfo infos)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix