萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 編程語言綜合 >> Mybatis整合Spring

Mybatis整合Spring

 Mybatis整合SpringintegrationMapperScannerConfigurer 

Mybatis整合Spring
根據官方的說法,在ibatis3,也就是Mybatis3問世之前,Spring3的開發工作就已經完成了,所以Spring3中還是沒有對Mybatis3的支持。因此由Mybatis社區自己開發了一個Mybatis-Spring用來滿足Mybatis用戶整合Spring的需求。下面就將通過Mybatis-Spring來整合Mybatis跟Spring的用法做一個簡單的介紹。
MapperFactoryBean
首先,我們需要從Mybatis官網上下載Mybatis-Spring的jar包添加到我們項目的類路徑下,當然也需要添加Mybatis的相關jar包和Spring的相關jar包。我們知道在Mybatis的所有操作都是基於一個SqlSession的,而SqlSession是由SqlSessionFactory來產生的,SqlSessionFactory又是由SqlSessionFactoryBuilder來生成的。但是Mybatis-Spring是基於SqlSessionFactoryBean的。在使用Mybatis-Spring的時候,我們也需要SqlSession,而且這個SqlSession是內嵌在程序中的,一般不需要我們直接訪問。SqlSession也是由SqlSessionFactory來產生的,但是Mybatis-Spring給我們封裝了一個SqlSessionFactoryBean,在這個bean裡面還是通過SqlSessionFactoryBuilder來建立對應的SqlSessionFactory,進而獲取到對應的SqlSession。通過SqlSessionFactoryBean我們可以通過對其指定一些屬性來提供Mybatis的一些配置信息。所以接下來我們需要在Spring的applicationContext配置文件中定義一個SqlSessionFactoryBean。

Xml代碼 收藏代碼
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
<property name="dataSource" ref="dataSource" /> 
<property name="mapperLocations" 
value="classpath:com/tiantian/ckeditor/mybatis/mappers/*Mapper.xml" /> 
<property name="typeAliasesPackage" value="com.tiantian.ckeditor.model" /> 
</bean> 

在定義SqlSessionFactoryBean的時候,dataSource屬性是必須指定的,它表示用於連接數據庫的數據源。當然,我們也可以指定一些其他的屬性,下面簡單列舉幾個:
mapperLocations:它表示我們的Mapper文件存放的位置,當我們的Mapper文件跟對應的Mapper接口處於同一位置的時候可以不用指定該屬性的值。
configLocation:用於指定Mybatis的配置文件位置。如果指定了該屬性,那麼會以該配置文件的內容作為配置信息構建對應的SqlSessionFactoryBuilder,但是後續屬性指定的內容會覆蓋該配置文件裡面指定的對應內容。
typeAliasesPackage:它一般對應我們的實體類所在的包,這個時候會自動取對應包中不包括包名的簡單類名作為包括包名的別名。多個package之間可以用逗號或者分號等來進行分隔。
typeAliases:數組類型,用來指定別名的。指定了這個屬性後,Mybatis會把這個類型的短名稱作為這個類型的別名,前提是該類上沒有標注@Alias注解,否則將使用該注解對應的值作為此種類型的別名。
Xml代碼 收藏代碼
<property name="typeAliases"> 
<array> 
<value>com.tiantian.mybatis.model.Blog</value> 
<value>com.tiantian.mybatis.model.Comment</value> 
</array> 
</property> 

plugins:數組類型,用來指定Mybatis的Interceptor。
typeHandlersPackage:用來指定TypeHandler所在的包,如果指定了該屬性,SqlSessionFactoryBean會自動把該包下面的類注冊為對應的TypeHandler。多個package之間可以用逗號或者分號等來進行分隔。
typeHandlers:數組類型,表示TypeHandler。
接下來就是在Spring的applicationContext文件中定義我們想要的Mapper對象對應的MapperFactoryBean了。通過MapperFactoryBean可以獲取到我們想要的Mapper對象。MapperFactoryBean實現了Spring的FactoryBean接口,所以MapperFactoryBean是通過FactoryBean接口中定義的getObject方法來獲取對應的Mapper對象的。在定義一個MapperFactoryBean的時候有兩個屬性需要我們注入,一個是Mybatis-Spring用來生成實現了SqlSession接口的SqlSessionTemplate對象的sqlSessionFactory;另一個就是我們所要返回的對應的Mapper接口了。
定義好相應Mapper接口對應的MapperFactoryBean之後,我們就可以把我們對應的Mapper接口注入到由Spring管理的bean對象中了,比如Service bean對象。這樣當我們需要使用到相應的Mapper接口時,MapperFactoryBean會從它的getObject方法中獲取對應的Mapper接口,而getObject內部還是通過我們注入的屬性調用SqlSession接口的getMapper(Mapper接口)方法來返回對應的Mapper接口的。這樣就通過把SqlSessionFactory和相應的Mapper接口交給Spring管理實現了Mybatis跟Spring的整合。
Spring的applicationContext.xml配置文件:

Xml代碼 收藏代碼
<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd 
http://www.springframework.org/schema/mvc 
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 
<context:component-scan base-package="com.tiantian.mybatis"/> 
<context:property-placeholder location="classpath:config/jdbc.properties"/> 
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
destroy-method="close"> 
<property name="driverClassName" value="${jdbc.driver}" /> 
<property name="url" value="${jdbc.url}" /> 
<property name="username" value="${jdbc.username}" /> 
<property name="password" value="${jdbc.password}" /> 
</bean> 

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
<property name="dataSource" ref="dataSource" /> 
<property name="mapperLocations" value="classpath:com/tiantian/mybatis/mapper/*.xml"/> 
<property name="typeAliasesPackage" value="com.tiantian.mybatis.model" /> 
</bean> 

<bean id="blogMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> 
<property name="mapperInterface" 
value="com.tiantian.mybatis.mapper.BlogMapper" /> 
<property name="sqlSessionFactory" ref="sqlSessionFactory" /> 
</bean> 

</beans> 

BlogMapper.xml文件:

Xml代碼 收藏代碼
<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE mapper 
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 
<mapper namespace="com.tiantian.mybatis.mapper.BlogMapper"> 
<!-- 新增記錄 --> 
<insert id="insertBlog" parameterType="Blog" useGeneratedKeys="true" keyProperty="id"> 
insert into t_blog(title,content,owner) values(#{title},#{content},#{owner}) 
</insert> 
<!-- 查詢單條記錄 --> 
<select id="selectBlog" parameterType="int" resultMap="BlogResult"> 
select * from t_blog where id = #{id} 
</select> 
<!-- 修改記錄 --> 
<update id="updateBlog" parameterType="Blog"> 
update t_blog set title = #{title},content = #{content},owner = #{owner} where id = #{id} 
</update> 
<!-- 查詢所有記錄 --> 
<select id="

copyright © 萬盛學電腦網 all rights reserved