Spring+ibatis批量存储心得

程序功能:
使用ibatis+spring将oracle数据库中的tfile表中的数据抽取到db2数据库的tfile表,这两个表的结构相同。

测试环境:
celeron M 1.4/512M/mysql 5.0数据库
代码:public static void main(String[] args) {

 

        // TODO Auto-generated method stub
        ClassPathResource resource = new ClassPathResource(
                "applicationContext.xml");
        BeanFactory factory = new XmlBeanFactory(resource);
        TFileDAO tFileDao = (TFileDAO) factory.getBean("tfile");

        TFileDAO test2FileDao = (TFileDAO) factory.getBean("test2tfile");
        //获取全部数据
        List list = tFileDao.getAll();
        //开启事务
        DataSourceTransactionManager txm = (DataSourceTransactionManager) factory
                .getBean("test2transactionManager");
        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
        TransactionStatus status = txm.getTransaction(def);
        try {
            test2FileDao.getSqlMapClient().startBatch();
            for (int i = 0, count = list.size(); i < count; i++) {
            //插入数据
                test2FileDao.insert((TFile) list.get(i));
            }
            test2FileDao.getSqlMapClient().executeBatch();// 这两句有问题,请见Spring+ibatis心得2!
        } catch (Exception e) {
            txm.rollback(status);
            System.out.println(e);
        }
        txm.commit(status);
        System.out.println(list.size());
    }

 1、保证使用长事务,不要在每个插入都事务提交,这样性能可以有很大幅度的提升

2、使用 test2FileDao.getSqlMapClient().startBatch();
              test2FileDao.getSqlMapClient().executeBatch();
             可以发起jdbc对批量数据插入的优化与自动代码压缩功能。

      结语:这次使用ibatis在同样的硬件、数据库、数据条数的环境下测试,在不起用batch,所有数据库,数据池特性均使用默认设置情况下使用19秒,并且使用一次性将数据读入内存的方式,效果优于hibernate,所以真信优化后的程序应该比hibernate效率更高。但是从程序编写方面来讲,hibernate省去了过多的代码,可以让程序员更轻松些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值