批处理插入数据不成功
老师好,这里存在这样一个问题,当批处理插入一万条数据的时候,程序一直运行不结束,当换成1千条数据的时候能插入成功速度却很慢,而且比单条插入的速度还要慢,这是什么原因
批量插入一千条数据的运行结果
单条插入一万条数据的运行结果
由上面的数据看来批量插入一千条数据的时间甚至不如单条插入一万条数据的时间
如果批量插入一万条数据程序会一直执行不结束
下面是代码
mapper
<insert id="batchInsert" parameterType="java.util.List"> INSERT INTO t_goods(title, sub_title, original_cost, current_price, discount, is_free_delivery, category_id) VALUES <foreach collection="list" item="item" index="index" separator=","> (#{item.title},#{item.subTitle}, #{item.originalCost}, #{item.currentPrice}, #{item.discount}, #{item.isFreeDelivery}, #{item.categoryId}) </foreach> </insert>
测试代码
/** * 批量插入测试 * @throws Exception */ @Test public void testBatchInsert() throws Exception { SqlSession session = null; try { long st = new Date().getTime(); session = MyBatisUtils.openSession(); List list = new ArrayList(); for (int i = 0; i < 10000; i++) { Goods goods = new Goods(); goods.setTitle("测试商品"); goods.setSubTitle("测试子标题"); goods.setOriginalCost(200f); goods.setCurrentPrice(100f); goods.setDiscount(0.5f); goods.setIsFreeDelivery(1); goods.setCategoryId(43); //insert()方法返回值代表本次成功插入的记录总数 list.add(goods); } session.insert("goods.batchInsert", list); session.commit();//提交事务数据 long et = new Date().getTime(); System.out.println("执行时间:" + (et - st) + "毫秒"); // System.out.println(goods.getGoodsId()); } catch (Exception e) { if (session != null) { session.rollback();//回滚事务 } throw e; } finally { MyBatisUtils.closeSession(session); } } /** * 10000次数据插入对比测试用例 * @throws Exception */ @Test public void testInsert1() throws Exception { SqlSession session = null; try{ long st = new Date().getTime(); session = MyBatisUtils.openSession(); List list = new ArrayList(); for(int i = 0 ; i < 10000 ; i++) { Goods goods = new Goods(); goods.setTitle("测试商品"); goods.setSubTitle("测试子标题"); goods.setOriginalCost(200f); goods.setCurrentPrice(100f); goods.setDiscount(0.5f); goods.setIsFreeDelivery(1); goods.setCategoryId(43); //insert()方法返回值代表本次成功插入的记录总数 session.insert("goods.insert" , goods); } session.commit();//提交事务数据 long et = new Date().getTime(); System.out.println("执行时间:" + (et-st) + "毫秒"); // System.out.println(goods.getGoodsId()); }catch (Exception e){ if(session != null){ session.rollback();//回滚事务 } throw e; }finally { MyBatisUtils.closeSession(session); } }
10
收起
正在回答 回答被采纳积分+1
1回答
Java工程师 2024版
- 参与学习 2030 人
- 提交作业 1352 份
- 解答问题 1231 个
2024重磅革新,超百小时内容豪华升级,加速提升高级技能与高薪就业竞争力 课程紧贴企业最新人才需求,历经7年持续迭代,帮助万名学子入行转行 从零起点到高阶实战,学习路径稳健顺滑,成就从小白到工程师高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星