MyBatis进阶八:Mybatis批处理;(批量插入,批量删除,批量更新待写…)

包括,【批量插入】,【批量删除】,【批量更新,待完成…】

目录

一:不使用批处理时,速度很慢,效率低(以插入为例)

(1)Mapper XML中的SQL语句

(2)测试代码:插入一万条数据;

二:批处理之:批量插入;(和一对比一下)

(1)Mapper XML中的SQL语句

(2)测试代码:批量插入一万条数据;

三:批处理的一些问题(以插入为例)

(1)问题1:因为是批量插入数据,无法获取到插入数据的id号:

(2)问题2:批量插入的时候,为了能够满足数据包大小的要求,有时需要采取【分组批量插入的策略】

问题说明:

问题解决案例代码(里面的if嵌套好多,以后改善吧)

四:批处理之:批量删除

(1)Mapper XML中的SQL语句

(2)测试代码:批量删除一万条数据;

五:批处理之:批量更新(待写……)


一:不使用批处理时,速度很慢,效率低(以插入为例)

(1)Mapper XML中的SQL语句

(2)测试代码:插入一万条数据;



/**
 * JUnit单元测试类
 */
public class MyBatisTestor {

    @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);
                session.insert("goods.insert1", goods);

            }
            session.commit();
            long et = new Date().getTime();
            System.out.println("整个插入操作花费时间为:"+(et - st)+"毫秒。");

        } catch (Exception e) {
            if (session != null) {
                session.rollback();
            }
            throw e;
        }finally {
            MyBatisUtils.closeSession(session);
        }
    }
}

即上面代码的逻辑是每次只插入一条,一共调用了Mapper XML中的SQL一万次;

运行结果:


 

二:批处理之:批量插入;(和一对比一下)

利用集合保存数据,然后调用Mapper XML中的SQL语句,把这个集合作为参数传过去,实现批处理。

(1)Mapper XML中的SQL语句

    <!--
        insert into table(字段1,字段2) values(v1,v2),(v1,v2);
    -->
    <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>

说明:

(1)parameterType设置成List

(2)插入多条数据,(insert语句的用法可以参考

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值