SqlSessionFactoryBean是mybatis的核心,当与spring进行整合时,我们使用mybatis-spring提供的SqlSessionFactoryBean来创建其实例,SqlSessionFactoryBean实现了FactoryBean接口。SqlSessionFactoryBean的配置有2种风格:
-
保留mybatis的核心文件
mybatis的配置依然保留在mybatis的核心配置文件mybatis-config文件中,以下是一个示例:
<configuration>
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="mapUnderscoreToCamelcase" value="true"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
</settings>
<typeAliases>
<package name="com.fankui.crowd.entity"/>
</typeAliases>
<mappers>
<mapper resource="mybatis/mapper/*Mapper.xml"/>
</mappers>
</configuration>
在mybatis-config文件中并没有配置<environment>、<dataSource>、<transactionManager>等元素。即使配置了,也会被SqlSessionFactoryBean忽略。我们需要显式的为SqlSessionFactoryBean的dataSource属性引用一个数据源配置,如果不指定,在其初始化时就会抛异常。通过configLocation属性,指定mybatis核心配置文件的路径。
此时SqlSessionFactoryBean配置方式如下:
<!-- 配置数据源 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
<property name="url" value="${jdbc.url}"/>
<property name="driverClassName" value="${jdbc.driver}"/>
</bean>
<!-- 配置SqlSessionFactoryBean -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 装配数据源 -->
<property name="dataSource" ref="dataSource"/>
<!-- 指定MyBatis全局配置文件位置 -->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
-
不保留mybatis的核心文件
从mybatis-spring 1.3.0之后,我们可以移除mybatis-config文件,将所有关于mybatis的配置都通过SqlSessionFactoryBean来指定。以下配置案例演示了与上述等价的配置:
<!-- 配置SqlSessionFactoryBean -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 装配数据源 -->
<property name="dataSource" ref="dataSource"/>
<!-- 指定Mapper配置文件位置 -->
<property name="mapperLocations" value="classpath:mybatis/mapper/*Mapper.xml"/>
<!-- 使用typeAliasesPackage属性指定entity所在包 -->
<property name="typeAliasesPackage" value="com.fankui.crowd.entity"/>
<property name="configuration">
<bean class="org.apache.ibatis.session.Configuration">
<property name="cacheEnabled" value="true"/>
<property name="mapUnderscoreToCamelcase" value="true"/>
<property name="defaultExecutorType" value="SIMPLE"/>
</bean>
</property>
</bean>