Java的MyBatis+Spring框架中使用数据访问对象DAO模式的方法
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>
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.usermapperimpl"> <property name="sqlsessionfactory" ref="sqlsessionfactory"/> </bean>