您好,登錄后才能下訂單哦!
本篇文章為大家展示了利用怎么實(shí)現(xiàn)一個(gè)Mybatis批量提交功能,內(nèi)容簡明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
一、mapper 使用foreach 遍歷
批量insert:
<insert id="addEmpsBatch"> INSERT INTO emp(ename,gender,email,did) VALUES <foreach collection="emps" item="emp" separator=","> (#{emp.eName},#{emp.gender},#{emp.email},#{emp.dept.id}) </foreach> </insert>
批量update:
<update id="updateNewStock" parameterType="java.util.List"> <foreach collection="list" item="bean" index="index" open="" close="" separator=";"> UPDATE green_beans <set> stock=#{bean.stock} </set> <where> beanUid = #{bean.beanUid} </where> </foreach> </update>
二、使用 mybatis ExecutorType.BATCH
使用步驟:
(1)在全局配置文件applcationContext.xml中加入
<!-- 配置一個(gè)可以批量執(zhí)行的sqlSession --> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg> <constructor-arg name="executorType" value="BATCH"></constructor-arg> </bean>
(2)在service實(shí)現(xiàn)中添加:
@Autowired private SqlSession sqlSession; //批量保存員工 @Override public Integer batchEmp() { // TODO Auto-generated method stub //批量保存執(zhí)行前時(shí)間 long start=System.currentTimeMillis(); EmployeeMapper mapper= sqlSession.getMapper(EmployeeMapper.class); for (int i = 0; i < 10000; i++) { mapper.addEmp(new Employee(UUID.randomUUID().toString().substring(0,5),"b","1")); } long end= System.currentTimeMillis(); long time2= end-start; //批量保存執(zhí)行后的時(shí)間 System.out.println("執(zhí)行時(shí)長"+time2); return (int) time2; }
demo:
@Test //批量保存方法測試 public void testBatch() throws IOException{ SqlSessionFactory sqlSessionFactory=getSqlSessionFactory(); //可以執(zhí)行批量操作的sqlSession SqlSession openSession=sqlSessionFactory.openSession(ExecutorType.BATCH); //批量保存執(zhí)行前時(shí)間 long start=System.currentTimeMillis(); try{ EmployeeMapper mapper= openSession.getMapper(EmployeeMapper.class); for (int i = 0; i < 1000; i++) { mapper.addEmp(new Employee(UUID.randomUUID().toString().substring(0,5),"b","1")); } openSession.commit(); long end= System.currentTimeMillis(); //批量保存執(zhí)行后的時(shí)間 System.out.println("執(zhí)行時(shí)長"+(end-start)); //批量 預(yù)編譯sql一次==》設(shè)置參數(shù)==》10000次==》執(zhí)行1次 677 //非批量 (預(yù)編譯=設(shè)置參數(shù)=執(zhí)行 )==》10000次 1121 }finally{ openSession.close(); } }
mapper:
public interface EmployeeMapper { //批量保存員工 public Long addEmp(Employee employee); }
mapper.xml :
<mapper namespace="com.agesun.mybatis.dao.EmployeeMapper" <!--批量保存員工 --> <insert id="addEmp"> insert into employee(lastName,email,gender) values(#{lastName},#{email},#{gender}) </insert> </mapper>
三、總結(jié):
方式一、需要修改數(shù)據(jù)庫屬性添加allowMutiQueries=true,例如:jdbc.url=jdbc:mysql://localhost:3306/mybatis?allowMultiQueries=true
方式二、需要開啟事務(wù)提交,在applcationContext.xml中添加BATCH
上述內(nèi)容就是利用怎么實(shí)現(xiàn)一個(gè)Mybatis批量提交功能,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。