【SSM】Mybatis之SqlSession

在MyBatis中,你可以使用SqlSessionFactory来创建SqlSession。
一旦你获得一个session之后,你可以使用它来执行映射语句,提交或回滚连接,
最后,当不再需要它的时候, 你可以关闭 session。
使用MyBatis-Spring之后, 你不再需要直接使用SqlSessionFactory了,

因为你的bean可以通过一个线程安全的SqlSession来注入,基于Spring的事务配置来自动提交,回滚,关闭 session。

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作为构造方法的参数来创建。

<beanid="sqlSession"class="org.mybatis.spring.SqlSessionTemplate">
<constructor-argindex="0"ref="sqlSessionFactory"/>
</bean>
这个bean现在可以直接注入到DAObean中。你需要在bean中添加一个SqlSession属性,就像下面的代码:
publicclassUserDaoImplimplementsUserDao{
privateSqlSessionsqlSession;
publicvoidsetSqlSession(SqlSessionsqlSession){
this.sqlSession=sqlSession;
}
publicUsergetUser(StringuserId){
return(User)sqlSession.selectOne("org.mybatis.spring.sample.mapper.UserMapper.getUser",userId);
}
}
如下注入SqlSessionTemplate:

<beanid="userDao"class="org.mybatis.spring.sample.dao.UserDaoImpl">
<propertyname="sqlSession"ref="sqlSession"/>
</bean>
SqlSessionTemplate有一个使用ExecutorType作为参数的构造方法。

这允许你用来创建对象,比如,一个批量SqlSession,但是使用了下列Spring配置的XML文件:

<beanid="sqlSession"class="org.mybatis.spring.SqlSessionTemplate">
<constructor-argindex="0"ref="sqlSessionFactory"/>
<constructor-argindex="1"value="BATCH"/>
</bean>
现在你所有的语句可以批量操作了,下面的语句就可以在DAO中使用了。
publicvoidinsertUsers(User[]users){
for(Useruser:users){
sqlSession.insert("org.mybatis.spring.sample.mapper.UserMapper.insertUser",user);
}
}
注意,如果所需的执行方法和默认的SqlSessionFactory设置不同,这种配置风格才能使用。

对这种形式需要说明的是当这个方法被调用时,不能有一个存在使用不同ExecutorType运行的事务。

也要保证在不同的事务中,使用不同执行器来调用SqlSessionTemplate时,(比如PROPAGATION_REQUIRES_NEW)或完全在一个事务外面。


SqlSessionDaoSupport
SqlSessionDaoSupport是一个抽象的支持类,用来为你提供SqlSession。

调用getSqlSession()方法你会得到一个SqlSessionTemplate,之后可以用于执行SQL方法,就像下面这样:

publicclassUserDaoImplextendsSqlSessionDaoSupportimplementsUserDao{
publicUsergetUser(StringuserId){
return(User)getSqlSession().selectOne("org.mybatis.spring.sample.mapper.UserMapper.getUser",userId);
}
}
通常MapperFactoryBean是这个类的首选,因为它不需要额外的代码。

但是,如果你需要在DAO中做其它非MyBatis的工作或需要具体的类,那么这个类就很有用了。

SqlSessionDaoSupport需要一个sqlSessionFactory或sqlSessionTemplate属性来设置。

这些被明确地设置或由Spring来自动装配。如果两者都被设置了,那么SqlSessionFactory是被忽略的。

假设类UserMapperImpl是SqlSessionDaoSupport的子类,它可以在Spring中进行如下的配置:

<beanid="userMapper"class="org.mybatis.spring.sample.mapper.UserDaoImpl">
<propertyname="sqlSessionFactory"ref="sqlSessionFactory"/>
</bean>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值