第五章节 使用 SqlSession

第五章 使用 SqlSession

原文链接; http://www.mybatis.org/spring/zh/sqlsession.html

每当 MyBatis 中,你得用 SqlSessionFactory 来创造
SqlSession。一旦您拿走一个 session
之后,你可以她来执行映射语句子,提交或回滚连接,最后,当不再用它们的常 候,
你可以关闭 session。 使用 MyBatis-Spring 之后, 你不再要直接动用
SqlSessionFactory 了,因为若的 bean 可以透过一个线程安全之 SqlSession
来注入,基于 Spring 的作业配置 来自动提交,回滚,关闭 session。

留意日常不必直接采用 SqlSession。 在多数场面下 MapperFactoryBean,
将会见于 bean 中流入所待的映射器。下一致章节中之 MapperFactoryBean(6.1
节)会解释这个细节。

SqlSessionTemplate

SqlSessionTemplate 是 MyBatis-Spring 的中心。 这个看似负责管理 MyBatis 的
SqlSession, 调用 MyBatis 的 SQL 方法, 翻译异常。 SqlSessionTemplate
是线程安全之, 可以叫多独 DAO 所共享利用。

当调用 SQL 方法时, 包含从映射器 getMapper()方法返回的法,
SqlSessionTemplate 将见面保证使用的 SqlSession 是暨眼前 Spring
的作业相关的。此外,它管理 session 的命
周期,包含必要之关门,提交或回滚操作。

SqlSessionTemplate 实现了 SqlSession 接口,这就是说,在代码中不管需对
MyBatis 的 SqlSession 进行轮换。 SqlSessionTemplate
通常是叫用来取代默认的 MyBatis 实现之 DefaultSqlSession ,
因为模板可以涉足到 Spring 的事体中并且被多只注入的映射器类所设
用时为是线程安全的。相同应用程序中简单个像样中的转换可能会见挑起数据一致性的问题。

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

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

斯 bean 现在好一直注入及 DAO bean 中。你要在 bean 中上加一个
SqlSession 属性,就比如下的代码:

public class UserDaoImpl implements UserDao {

  private SqlSession sqlSession;

  public void setSqlSession(SqlSession sqlSession) {
    this.sqlSession = sqlSession;
  }

  public User getUser(String userId) {
    return (User) sqlSession.selectOne("org.mybatis.spring.sample.mapper.UserMapper.getUser", userId);
  }
}

一般来说注入 SqlSessionTemplate:

<bean id="userDao" class="org.mybatis.spring.sample.dao.UserDaoImpl">
  <property name="sqlSession" ref="sqlSession" />
</bean>

SqlSessionTemplate 有一个行使 ExecutorType
作为参数的构造方法。这允许你用来 创建对象,比如,一个批量
SqlSession,但是采取了下列 Spring 配置的 XML 文件:

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

现在您持有的讲话可以批量操作了,下面的话语就好当 DAO 中使了。

public void insertUsers(User[] users) {
   for (User user : users) {
     sqlSession.insert("org.mybatis.spring.sample.mapper.UserMapper.insertUser", user);
   }
 }

注意,如果所需要的推行方与默认的 SqlSessionFactory
设置不同,这种布局风格才 能使。

本着这种形式要证实的凡当这艺术为调用时,不克发出一个有使用不同
ExecutorType 运行的事务。也只要保在不同的事情中,使用不同执行器来调用
SqlSessionTemplate 时, (比如
PROPAGATION_REQUIRES_NEW)或全以一个作业外面。

SqlSessionDaoSupport

SqlSessionDaoSupport 是 一 个 抽象 的支 持 类, 用来 为公 提供 SqlSession
。 调 用 getSqlSession()方法你见面收获一个
SqlSessionTemplate,之后好用来实施 SQL 方法, 就像下这样:

public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
  public User getUser(String userId) {
    return (User) getSqlSession().selectOne("org.mybatis.spring.sample.mapper.UserMapper.getUser", userId);
  }
}

一般说来 MapperFactoryBean
是此看似的首选,因为它们不需要分外的代码。但是,如果您 需要以 DAO 中召开另外非
MyBatis 的行事还是要切实的类似,那么这个看似就坏有因此了。

SqlSessionDaoSupport 需要一个 sqlSessionFactory 或 sqlSessionTemplate
属性来 设 置 。 这 些 被 明 确 地 设 置 或 由 Spring 来 自 动 装 配 。
如 果 两 者 都 被 设 置 了 , 那 么 SqlSessionFactory 是深受忽略的。

借用设类 UserMapperImpl 是 SqlSessionDaoSupport 的子类,它可当 Spring
中进行如 下的布:

<bean id="userMapper" class="org.mybatis.spring.sample.mapper.UserDaoImpl">
  <property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

 

网站地图xml地图