MyBatis-Spring集成的理解

jopen 11年前

首先我自己简单介绍一下mybatis

mybatis是在配置中写SQL,用对象映射
mybatis看做是是数据持久层的框架,它主要是对数据库和对象的关系进行操作

再说下:
mybatis和hibernate的最大区别在于,自己写SQL,而hibernate自动映射SQL,mybatis更加灵活,更适用于二次开发,如果要涉及较多的数据库结构的修改的话,hibernate更加有优势些

现在开始集成MyBatis-Spring

(1)要使用MyBatis-Spring的模块的,首先要下载mybatis-spring.jar包,导入Mybatis相关的包。并且在Maven中pom.xml加入加入依赖关系
(2)在spring框架的应用上下文配置文件applicationContext.xml中定义SqlSessionFactory和至少一个数据映射类


如下在MyBatis-Spring中,SqlSessionFactorBean 用于创建SqlSessionFactory
这是我的项目配置:


 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>
        <!-- mapper和resultmap配置路径 -->
        <property name="mapperLocations">
            <list>
               
                <value>classpath:com/xmoney/*/-oracle-mapper.xml</value>
            </list>
        </property>
    </bean>


其中数据源dataSource可以是任何的数据库,属性configLocation用来指定Mybatis的XML文件配置的路径
属性mapperLocations中list用来指定mybatis的XML的映射文件,比如项目中每个模块的xml(用来操作数据库的Sql语句)
(3)MyBatis的自动配置

没有必要为Spring的所有的XML文件注册所有的映射器,可以使用MapperScannerConfigurer,它将查找类路径下的映射器,并且将他们自动创建成MapperFactoryBeans


这是在applicationContext.xml中的配置:

 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.xmoney"/>
        <property name="markerInterface" value="com.xmoney.manage.entity.Mapper"/>
    </bean>
其中属性basePackage会让接口文件映射问基本包路径


这里要注意一点:如果你使用了一个以上的DataSource,也就是多个SqlSessionFactory,那么自动装配就会不起作用
此时可以将sqlSessionFactory换成sqlSessionFactoryBeanName或者sqlSessionTemplateBeanName


属性markerInterface指定要寻找的父接口


其中MyBatis的配置XML 如下


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd"&gt;


<configuration>
<settings>
<!-- changes from the defaults -->
<setting name="lazyLoadingEnabled" value="false" />
</settings>
<typeAliases>
   <typeAlias alias="Hnyhb" type="com.xmoney.manage.entity.Hnyhb" />
   <typeAlias alias="Page" type="com.xmoney.manage.entity.Page" />
</typeAliases>


</configuration>


这里有两个配置,一个是LazyLoadingEnable,设为false,让Mybatis禁止Lazy加载
在TypeAliases,这是一个别名,之所以要别名,是为了在Mapper映射的时候方便使用


以上是我对Mybatis和spring集成的配置,以及和hibernate与spring集成的比较