mybatis与spring的整合之SqlSessionTemplate

本文详细介绍了mybatis与spring整合过程中SqlSessionTemplate的使用,包括SqlSessionTemplate的作用、构造方法以及源码解析,特别是动态代理创建SqlSession的过程,并探讨了如何关闭SqlSession。
摘要由CSDN通过智能技术生成

使用 SqlSession

  • MyBatis 中,你可以使用 SqlSessionFactory 来创建 SqlSession。一旦你获得一个 session 之后,你可以使用它来执行映射语句,提交或回滚连接。最后,当不再需要它的时候, 你可以关闭session
  • 使用 MyBatis-Spring 之后, 你不再需要直接使用 SqlSessionFactory 了,因为你的 bean 可以通过一个线程安全的 SqlSession 来注入,基于 Spring 的事务配置来自动提交、回滚、关闭 session

SqlSessionTemplate

SqlSessionTemplateMyBatis-Spring 的核心。 这个类负责管理 MyBatisSqlSession, 调用 MyBatisSQL 方法, 翻译异常。 SqlSessionTemplate 是线程安全的, 可以被多个 DAO 所共享使用。

当调用 SQL 方法时, 包含从映射器 getMapper()方法返回的方法, SqlSessionTemplate 将会保证使用的 SqlSession 是和当前 Spring 的事务相关的。此外,它管理 session 的生命 周期,包含必要的关闭,提交或回滚操作。

SqlSessionTemplate 实现了 SqlSession 接口,这就是说,在代码中无需对 MyBatisSqlSession 进行替换。 SqlSessionTemplate 通常是被用来替代默认的 MyBatis 实现的 DefaultSqlSession , 因为模板可以参与到 Spring 的事务中并且被多个注入的映射器类所使 用时也是线程安全的。相同应用程序中两个类之间的转换可能会引起数据一致性的问题。

SqlSessionTemplate 对象可以使用 SqlSessionFactory 作为构造方法的参数来创建。

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
  <constructor-arg index="0" ref="sqlSessionFactory" />
</bean>

源码

SqlSessionTemplate只有构造方法注入,没有setter方法

SqlSessionTemplate构造方法

一个入参

这是用得最多的构造方法,注入一个SqlSessionFactory
sqlSessionFactory.getConfiguration().getDefaultExecutorType(),获取Configuration默认的executorType,为SIMPLEConfiguration的初始化可详见mybatis与spring的整合之SqlSessionFactoryBean

public SqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
        this(sqlSessionFactory, sqlSessionFactory.getConfiguration().getDefaultExecutorType());
    }

两个入参

一般执行批量操作时需要改变executorTypeBATCH
MyBatisExceptionTranslator是异常转换器

public SqlSessionTemplate(SqlSessionFactory sqlSessionFactory, ExecutorType executorType) {
    this(sqlSessionFactory, executorType, new MyBatisExceptionTranslator(sqlSessionFactory.getConfiguration().getEnvironment().getDataSource(), true));
}

三个入参

一般都是SqlSessionTemplate内部自己调用,完成属性赋值
其中最重要的是sqlSessionProxy,通过JDK动态 代理创建的session,执行sql语句是通过这个代理对象完成的<

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值