当需要更新数据库里大量数据时,可以用MyBatis里BATCH来批量提交数据,这样可以节省时间,代码如下。

    @Autowired
    private SqlSessionTemplate sqlSessionTemplate; 

    private void addPerson(List<PersonDTO> updates) {
        // 新获取一个模式为BATCH,自动提交为false的session
        // 如果自动提交设置为true,将无法控制提交的条数,改为最后统一提交,可能导致内存溢出
        SqlSession session = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);
        //通过新的session获取mapper
        PersonMapper perMapper = session.getMapper(PersonMapper.class);
        try {
            for (int i = 0; i < updates.size(); i++) {
                perMapper.insert(updates.get(i));
                if (i % 1000 == 0 || i == updates.size() - 1) {
                    //System.out.println("提交一次1000数据");
                    //手动每1000个一提交,提交后无法回滚
                    sessionmit();
                    //清理缓存,防止溢出
                    session.clearCache();
                }
            }
        } catch (Exception e) {
            //没有提交的数据可以回滚
            session.rollback();
        } finally {
            session.close();
        }
    }

更多推荐

MyBatis---BATCH批量提交数据