版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BuquTianya/article/details/78943056
概述
MyBatis-Spring提供了多种和Spring的结合方式,当然我们平时可能只用到其中的一种,也就是MapperScannerConfigurer这种。在一些比较老的项目里边还可能还在用其他的几种之一。
尤其是当Spring的AbstractRoutingDataSource还没有被熟悉的时候,有些项目做分库使用了客户端的分库逻辑,通过某个id的取模值来选择不同的SqlSession。这些情况下,也会使用其他几种结合方式。
接下来对4种结合方式做一个大致的说明,这里不进行整体代码的罗列,即忽略Datasource和SqlSessionFactory的配置部分,仅展示关键部分代码。
以下四种方式,都需要定义一个IBlogManager的接口类:
package com.dangdang.dao;
import com.dangdang.model.Blog;
public interface IBlogManager {
Blog selectBlog(long id);
}
前两种方式需要自定义BlogManager的实现类,后两种MyBatis-Spring会自动给我们生成IBlogManager的动态代理类,也就不需要我们自己定义BlogManager实现类了。
使用SqlSessionTemplate
<!-- application-context.xml -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
public class BlogManager implements IBlogManager {
@AutoWired
private SqlSession sqlSession;
public void setSqlSession(SqlSession sqlSession) {
this.sqlSession = sqlSession;
}
public Blog getBlog(String id) {
return (Blog) sqlSession.selectOne("com.dangdang.mapper.BlogMapper.selectBlog", id);
}
}
使用SqlSessionDaoSupport
<!-- application-context.xml -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
public class BlogManager extends SqlSessionDaoSupport implements IBlogManager {
public Blog getBlog(String id) {
return (Blog) getSqlSession().selectOne("com.dangdang.mapper.BlogMapper.selectBlog", id);
}
}
使用MapperFactoryBean
<!-- application-context.xml -->
<bean id="blogManager" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.dangdang.mapper.BlogMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
这种形式每一个Mapper都要有一个MapperFactoryBean的定义。
使用MapperScannerConfigurer
<!-- application-context.xml -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.dangdang.mapper" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>