Spring 整合Mybatis配置
一、配置数据库
-
配置数据源,加载驱动。
<!-- 将properties文件加载进spring容器中 --> <context:property-placeholder location="dbConfig.properties"/> <!-- 配置数据源,加载驱动 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${driverClassName}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </bean>
-
配置SqlSessionFactory
<!-- SqlSessionFactory 通常不需要Mybatis xml配置文件,SqlSessionFactory会自动创建自有的Mybatis环境配置。 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="typeAliasesPackage" value="com.sean.hr.domain"/> </bean>
-
配置Mapper自动扫描。Mapper配置会负责管理SqlSession的打开和关闭,如果有使用Spring的事务功能,那么事务完成时,session会被自动的提交或者回滚。
<!-- 给定一个包,MapperScanner会自动将包下的Mapper配置类和dao类进行配置 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.sean.hr.dao"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean>
-
为什么要配置这个:
以mybatis官方的代码为例子,每次我们配置了一个Mapper都要创建一个MapperFactoryBean
,这样肯定会增加我们代码量,以及维护量。使用
MapperScannerConfigurer
,我们只要给定一个路径,它将会扫描这个包下所有的Mapper和Dao层底下的类,为它们创建各自接口的动态代理类。 -
**注意:**Mapper的全路径必须等同于dao层的路径,不然
MapperScannerConfigurer
无法将它们绑定,然后创建动态代理。
-
二、 配置声明式事务
-
创建
DataSourceTransactionManager
事务管理器<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean>
-
配置事务属性
<!-- 定义事务通知 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- 根据方法名来设置事务属性 --> <tx:method name="get*" read-only="true"/> <tx:method name="find*" read-only="true"/> <tx:method name="select*" read-only="true"/> <tx:method name="list*" read-only="true"/> <tx:method name="*" propagation="REQUIRED"/> </tx:attributes> </tx:advice>
-
配置切面
<aop:config> <aop:pointcut id="txPointcut" expression="execution(* com.sean.hr.service.*.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/> </aop:config>