spring與mybatis三種整合方法


1.單獨使用MyBatis

單獨使用MyBatis,不結合其他框架,主要步驟是:

1.創建SqlSessionFactory對象

創建方法是通過SqlSessionFactoryBuilder這個類從mybatis的XML配置文件,或者porperties,或者URL獲取相關數據庫的配置信息。

2.從sqlSessionFactory獲取SqlSession。

3.使用SqlSession提供的API,對數據庫進行增刪改查,以及事務管理。

1
2
3
4
5
6
7
String resource =  "org/mybatis/example/mybatis-config.xml" ;
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory =  new  SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
session.insert( "BlogMapper.selectBlog" 101 );
session.commit();
sesssion.close();

 

2.結合Spring框架使用MyBatis

 MyBatis + Spring的使用方式,一般是在Spring的配置文件里,配置以下內容:

1.數據源(DataSource)

2.SqlSessionFactoryBean,實現FactoryBean接口,通過注入DataSource對象,以及MyBatis的相關配置信息,返回SQLSessionFactory對象。

1
2
3
4
5
6
< jee:jndi-lookup  id="dataSource" jndi-name="jdbc/mysql"></ jee:jndi-lookup >
< bean  id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
     < property  name="dataSource" ref="dataSource" />
     < property  name="configLocation" value="classpath:mybatis/mybatis-config.xml"></ property >
     < property  name="mapperLocations" value="classpath:mybatis/*/*.xml"></ property >
</ bean >

加入以上的配置信息就可以Dao類里,直接引用sqlSessionFactory這個對象,對數據庫進行操作(跟1的代碼一樣)。

如果Dao的代碼寫多了,這時候會發現,每次的數據庫操作,步驟都是要先

①獲取SqlSession對象->②調用數據庫操作的方法->③提交事務->④關閉SqlSession

其中①③④這三個步驟會一直環繞在每個Dao的方法里。

這時候會這么想,能否提供這樣一個功能,在調用方法之前自動獲取SqlSession對象,在調用方法之后自動提交事務和關閉SqlSession對象。這樣①③④這樣重復的代碼就可以剔除了,整個Dao類的代碼也變得更加簡潔。

3.SqlSessionTemplate的應用

上面提到的,在調用方法之前和調用方法之后,各執行一些操作。這種技術一下子就聯想到就是AOP編程方式。

AOP是Spring的第二個核心功能,所以自然它也提供了這樣的是一個實現類,就是SqlSessionTemplate

1
2
3
4
5
6
7
8
9
10
11
< jee:jndi-lookup  id="dataSource" jndi-name="jdbc/mysql"></ jee:jndi-lookup >
 
< bean  id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
     < property  name="dataSource" ref="dataSource" />
     < property  name="configLocation" value="classpath:mybatis/mybatis-config.xml"></ property >
     < property  name="mapperLocations" value="classpath:mybatis/*/*.xml"></ property >
</ bean >
     
< bean  id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
     < constructor-arg  ref="sqlSessionFactory" />
</ bean >

 

 引入SqlSessionTemplate這個類,在寫Dao時,每個方法,在執行之前,自動獲取SqlSession對象,執行之后,自動提交事務和關閉會話。

1
2
3
public  Object save(String str, Object obj)  throws  Exception {
   return  sqlSessionTemplate.insert(str, obj);
}

現在代碼一下子變得更簡潔了,只剩下數據操作的方法。

4.SqlSessionTemplate原理解析思路

為什么SqlSessionTemplate能夠在每個方法,在執行之前,自動獲取SqlSession對象,執行之后,自動提交事務和關閉會話。

要知道這個原理,其實相當於要了解Spring AOP原理。

要了解Spring AOP原理,就必須知道Java技術里,動態代理的原理。

Java的動態代理主要是涉及到JDK里java.lang.reflect包下的InvocationHandler接口和Proxy類里創建代理對象的方法。

SqlSessionTemplate的源碼解析

SqlSessionTemplate的構造方法里,創建了一個SqlSession的代理對象。

在這個代理對象,每次SQLSession的方法被調用,都執行以下操作。

上面代碼涉及到的知識點比較多,要完全理解,需要掌握下面列出的幾點。

5.知識點歸納

1.MyBatis中的SqlSessionFactory和SqlSession

2.Spring中的SqlSessionFactoryBean和SqlSessionTemplate

3.Spring AOP原理

4.Java動態代理原理

5.Java反射原理


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM