读书人

mybatis3的批量安插

发布时间: 2012-09-28 00:03:35 作者: rapoo

mybatis3的批量插入
最近遇见了一个需要批量插入的操作,没办法只好又来看看了哟,话说好久都没认真研究过技术方面的东西了。由于spring3.0.5还没有集成mybatis3,所以只能使用mybatis官方自带的与spring3集成的jar包,叫mybatis-spring-1.0.0.jar。记得以前以前看过在spring+ibatis2时的批量插入代码,大概样式如下:

public class SqlSessionTemplateDaoSupport extends DaoSupport {private SqlSessionTemplate sqlSession;@Autowired(required = false)public final void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {if (!this.externalSqlSession) {this.sqlSession = new SqlSessionTemplate(sqlSessionFactory);}}public final SqlSession getBatchSqlSession() {return new SqlSessionTemplate(this.sqlSession.getSqlSessionFactory(),ExecutorType.BATCH);//return sqlSession.getSqlSessionFactory().openSession(executorType, false);}...


可以看到新实现的SqlSessionTemplateDaoSupport类只是将返回类弄sqlSession的类型改成了SqlSessionTemplate,通过构造方法可以看出其实它本来就是SqlSessionTemplate类型的。需要注意的是上面构造sqlSession时是通过SqlSessionTemplate(this.sqlSession.getSqlSessionFactory(),ExecutorType.BATCH);来创建的,而不通过sqlSession.getSqlSessionFactory().openSession(executorType, false)来创建的。如果通过后者来创建需要手动来提交事务,即手动sqlSession.commit()。
而通过SqlSessionTemplate则不需要,因为SqlSessionTemplate中sqlSession的执行是需要通过SqlSessionInterceptor拦截的,这个动态拦截器会在执行方法后自己执行sqlSession.commit()方法。

读书人网 >软件架构设计

热点推荐