之前在SSM之Mybatis概览_数字公民某杨的博客-CSDN博客有这个示意图:
mybatis框架有两类xml配置,一个是全局的xml,另一类是单个接口的xml.
当spring整合mybatis,似乎看到有两种整合方式.
一种是把全局的xml里面生成的对象,全部配置到spring容器的bean对象,然后甚至可以不要全局.xml,也不要接口的xml,直接在接口方法上增加sql语句的注解.例如@Select("select * from xxx")。
<!-- 配置工厂bean-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"/>
<!-- 配置mapper层扫描-->
<bean id="mapper" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<property name="basePackage" value="com.tugou.mapper"/>
</bean>
还有一种是仍然保留全局。xml,然后在spring的容器中作为sqlsessionfactroy的组装对象,接口的xml也予以保留。这种做法的好处应该是,当使用复杂的sql语句,直接在方法上用注解方式并不是太方便。然后这种方式可以用mybatisgenerator工具生成sql语句,起到类似hibernate的效果吧。保留全局的xml还有个好处,就是当设置一些mybatis缓存等一些特殊配置的时候,保留的好处是显而易见的。
<!-- sqlSessionFactory-->
<bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:SqlMapConfig.xml"/>
</bean>
<!-- mapper扫描-->
<bean id="mapper" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="factory"/>
<property name="basePackage" value="com.tugou.Dao"/>
</bean>