MyBatis-Spring集成的理解
jopen
12年前
首先我自己简单介绍一下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">
<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集成的比较