今天嘗試spring整合mybatis時(shí)遇到這么一個(gè)問(wèn)題,就是在配置sqlSessionFactory時(shí)是否要配置mapperLocations的問(wèn)題。
[
](javascript:void(0); "復(fù)制代碼")
<pre><bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="datasource"></property>
<property name="typeAliasesPackage" value="com.fan.entity"/>
<property name="mapperLocations" value="classpath:com/fan/mapper/*.xml" />
<!--也可以引入mybatis配置文件
<property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml"></property> -->
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.fan.mapper"></property>
</bean></pre>

](javascript:void(0); "復(fù)制代碼")
結(jié)論是:如果Mapper.xml與Mapper.class在同一個(gè)包下且同名,spring掃描Mapper.class的同時(shí)會(huì)自動(dòng)掃描同名的Mapper.xml并裝配到Mapper.class。
如果Mapper.xml與Mapper.class不在同一個(gè)包下或者不同名,就必須使用配置mapperLocations指定mapper.xml的位置。
此時(shí)spring是通過(guò)識(shí)別mapper.xml中的 <mapper namespace="com.fan.mapper.UserDao"> namespace的值來(lái)確定對(duì)應(yīng)的Mapper.class的。