SqlSessionDaoSupport与SqlSessionTemplate对比
2015-11-26 15:03
447 查看
SqlSession(SqlSessionDaoSupport类)
SqlSessionDaoSupport
SqlSessionDaoSupport是一个抽象的支持类,用来为你提供SqlSession。调用getSqlSession()方法你会得到一个SqlSessionTemplate,这然后可以用于执行SQL方法,就像下面这样:
Java代码
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中进行如下的配置:
Java代码
<bean id="userMapper" class="org.mybatis.spring.sample.mapper.UserMapperImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
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作为构造方法的参数来创建。
Xml代码
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
这个bean现在可以直接注入到DAO bean中。你需要在bean中添加一个SqlSession属性,就像下面的代码:
Java代码
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:
Xml代码
<bean id="userDao" class="org.mybatis.spring.sample.dao.UserDaoImpl">
<property name="sqlSession" ref="sqlSession"/>
</bean>
SqlSessionDaoSupport
SqlSessionDaoSupport是一个抽象的支持类,用来为你提供SqlSession。调用getSqlSession()方法你会得到一个SqlSessionTemplate,这然后可以用于执行SQL方法,就像下面这样:
Java代码
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中进行如下的配置:
Java代码
<bean id="userMapper" class="org.mybatis.spring.sample.mapper.UserMapperImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
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作为构造方法的参数来创建。
Xml代码
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
这个bean现在可以直接注入到DAO bean中。你需要在bean中添加一个SqlSession属性,就像下面的代码:
Java代码
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:
Xml代码
<bean id="userDao" class="org.mybatis.spring.sample.dao.UserDaoImpl">
<property name="sqlSession" ref="sqlSession"/>
</bean>
相关文章推荐
- Mongodb索引分析工具Dex 安装与使用
- Mysql分表和分区的区别
- MongoDB入门实践
- SQL 查询一列多行返回一行
- 常用的LINQ to SQL 用法
- 先去重复再进行分页的SQL语句
- 数据库储存过程示例
- 友勤签约中信重工Oracle P6项目管理软件及技术服务项目
- mysql自增
- oracle数据库,怎么给已有数据的表添加自增字段
- ATM取款机的数据库模拟开发和实战总结
- oracle 定时运行存储调度 schedule job,传递参数 及相关
- MongoDB数据库和集合的状态信息
- Spark SQL - DataFrame
- SQLServer2008服务无法启动
- 怎么查看和修改 MySQL 的最大连接数
- access中 连续 join与 sql server的不同
- MySQL分区表
- CMD命令下访问Oracle数据库
- Mysql常用命令