mybatis和spring整合的配置方法有很多,核心都是一个矛盾:如何让spring管理mybatis为mapper生成的代理对象。
1、配置数据源
单独使用mybatis的时候数据源是在mybatis配置文件中配置的,有了spring现在可以交给spring管理。
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/javaee"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</bean>
2、配置mybatis.xml
即使是和spring整合一起使用,mybatis也需要通过某种方式能够读取并使用mybatis.xml文件,为此需要使用spring-mybatis整合包中提供的类sqlSessionFactoryBean。这个bean可以有许许多多的可供配置选项这里只配置了两个:1、数据源 2、mybatis.xml
<bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="mybatis.xml"/>
</bean>
mybatis.xml的写法也和之前不同,不仅不需要写数据源也不需要写mapper接口的位置了!!!,mapper接口文件的位置将在后面配置
<configuration> <settings> <setting name="logImpl" value="STDOUT_LOGGING" /> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> <environments default="default"> <environment id="default"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <!--<property name="driver" value="com.mysql.jdbc.Driver"/>--> <!--<property name="url" value="jdbc:mysql://localhost:3306/javaee"/>--> <!--<property name="username" value="root"/>--> <!--<property name="password" value="password"/>--> </dataSource> </environment> </environments> <!--<mappers>--> <!--<package name="mapper"/>--> <!--</mappers>--> </configuration>
3、让spring知道mapper接口在哪
这一步仍然也是有很多方法,这里只记录最简单且实用性较强的方法。
首先第一步是让spring容器管理mapper接口的bean,即使用@Repository注解。
@Repository public interface UserMapper { public User getUserById(long id); }
第二步让spring把这mapper的bean和mybatis整合起来,使用MapperScannerConfigurer,MapperScannerConfigurer也是spring-mybatis下的一个bean。顾名思义,这个bean可以以包扫描的方式去加载一个mapper包下的所有mapper。
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="annotationClass" value="org.springframework.stereotype.Repository"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"/>
<property name="basePackage" value="mapper"/>
</bean>