mybatis-spring的集成

Posted Together~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis-spring的集成相关的知识,希望对你有一定的参考价值。

mybatis-spring的集成

  源码下载(数据库使用derby,具体数据库结构参考这里

  在src下新建applicationContext.xml

  配置内容:数据源、SqlSessionFactory、Mapper、事务处理

一、配置SqlSessionFactory

  需要两个参数:数据源和Mybatis的配置文件路径

  这样SpringIOC容器就会初始化这个SqlSessionFactoryBean,解析Mybatis配置文件连同数据源一同保存在SpringBean里

 1    <!-- 配置数据源 -->
 2     <context:property-placeholder location="classpath:jdbc.properties"/>
 3     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
 4         <property name="driverClassName" value="${driver}"/>
 5         <property name="url" value="${url}"/>
 6     </bean>
 7     
 8     <!-- 配置SQLSessionFactory -->
 9     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
10         <property name="dataSource" ref="dataSource"/>  
11         <property name="configLocation" value="classpath:mybatis-config.xml"/> 
12     </bean>

  jdbc.properties

driver=org.apache.derby.jdbc.ClientDriver
url=jdbc:derby://localhost:1527/E:/my/derby/mydb

  在spring中已经初始化数据源,所以在mybatis配置文件中就无需再进行配置

  mybatis.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE configuration
 3   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4   "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5   <configuration>
 6       <settings>
 7           <!-- 开启延迟加载 -->
 8           <setting name="lazyLoadingEnabled" value="true"/>
 9           <!-- 每种属性按需加载 -->
10           <setting name="aggressiveLazyLoading" value="false"/>
11       </settings>
12   </configuration>

  有些书中介绍了配置SqlSessionTemplate,当同时设置了SqlSessionFactory和SqlSessionTemplate,系统就会用SqlSessionTemplate覆盖掉SqlSessionFactory,相比较而言,笔者还是喜欢采用Mapper接口的编程方式。

二、配置mapper(这里采用自动扫描的形式)

  采用MapperScannerConfigurer配置,属性:

    basePackage:指定让Spring自动扫描的包

    annotationClass:表示如果类被这个注解标识的时候才进行扫描

    sqlSessionFactoryBeanName:指定在spring中定义sqlSessionFactory的bean名称。如果被定义,sqlSessionFactory将不起作用

    sqlSessionTemplateBeanName:指定在spring中定义sqlSessionTemplate的bean名称。如果被定义,sqlSessionFactoryBeanName将不起作用

    markerInterface:指定是实现了什么接口就认为它是mapper

 1 <!-- 接口方式 -->
 2     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
 3         <property name="basePackage" value="com.example.dao"></property>
 4         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
 5     </bean> 
 6 //在sqlSessionFactory中加载映射文件
 7 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
 8         <property name="dataSource" ref="dataSource"/>  
 9         <property name="configLocation" value="classpath:mybatis-config.xml"></property> 
10         <!-- 加载映射文件 -->
11         <property name="mapperLocations" value="classpath*:/com/example/mapper/*Mapper.xml"></property>  
12     </bean>

三、配置事务

1    <!--  配置jdbc事务管理器,完成数据的完整性和一致性 -->
2     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
3         <property name="dataSource" ref="dataSource"></property>
4     </bean>
5     <!--  使用声明式事务管理方式     -->
6     <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>

  配置service层

    <!-- 启动spring注解 -->
    <context:annotation-config/>
    <!-- 扫描注解所在的包 -->
    <context:component-scan base-package="com.example"/>

  在service业务层中使用@Transaction注解便可开启事务,事务使用见上篇

 

-------end-------

以上是关于mybatis-spring的集成的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis 源码篇-MyBatis-Spring 剖析

mybatis-Spring boot 集成Mybatis怎么在控制台打印sql语句

mybatis-spring配置

Spring集成Mybatis3

Mybatis-Spring:MapperScan

mybatis-spring 中配置mapperLocations 的问题