mybatis不用多说,一个持久层框架,让开发者避开手动操作JDBC代码。
mybatis-spring会帮助开发者将MyBatis无缝整合到Spring中,可以把它理解为一个驱动。
MyBatis核心接口类
在mybatis应用中,是以一个SqlSessionFactory实例为中心的,其源码如下:
public interface SqlSessionFactory {
SqlSession openSession();
SqlSession openSession(boolean autoCommit);
SqlSession openSession(Connection connection);
SqlSession openSession(TransactionIsolationLevel level);
SqlSession openSession(ExecutorType execType);
SqlSession openSession(ExecutorType execType, boolean autoCommit);
SqlSession openSession(ExecutorType execType, TransactionIsolationLevel level);
SqlSession openSession(ExecutorType execType, Connection connection);
Configuration getConfiguration();
}
SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得,而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。具体的方式可以参考《http://www.mybatis.org/mybatis-3/zh/getting-started.html》,不文不赘述。
下图为Mybatis核心类间的关系,SqlSessionFactoryBuilder创建SqlSessionFactory实现类DefaultSqlSessionFactory,通过DefaultSqlSessionFactory来获取执行每条SQL语句的SqlSession,其实现是DefaultSqlSession。
MyBatis-Spring核心接口类
MyBatis-Spring只是一个驱动,最终持久化服务依旧是由MyBatis提供,即围绕SqlSessionFactory展开。Spring中,初始化Mybatis方式如下:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations">
<array>
<value>classpath:com/loongshawn/dao/impl/mapper/*.xml</value>
<value>classpath:com/loongshawn/dao/impl/mapper3/pmc/*.xml</value>
</array>
</property>
<property name="typeAliasesPackage" value="com.loongshawn.domain" />
</bean>
这里使用了SqlSessionFactoryBean类,通过查阅源码,SqlSessionFactoryBean实现了SqlSessionFactory接口,这说明Spring最终创建的bean并非SqlSessionFactoryBean本身,而是工厂类的getObject()方法返回的对象,即SqlSessionFactory对象。
public SqlSessionFactory getObject() throws Exception {
if (this.sqlSessionFactory == null) {
// afterPropertiesSet方法较复杂不展开,详情看源码
afterPropertiesSet();
}
return this.sqlSessionFactory;
}
xml配置文档中,mapperLocations属性使用一个资源位置的list,用来指定xml映射器文件的位置,支持Ant样式加载多个文件。
方式一:
<property name="mapperLocations">
<array>
<value>classpath:com/loongshawn/dao/impl/mapper/*.xml</value>
<value>classpath:com/loongshawn/dao/impl/mapper3/pmc/*.xml</value>
</array>
</property>
方式二:
<property name="mapperLocations" value="classpath:com/loongshawn/dao/impl/mapper3/pmc/*.xml" />