MyBatis使用心得(一)--- 简单介绍
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
?Mybatis的前身是iBatis,iBatis原本就是apache的一個(gè)開源項(xiàng)目,2010年該項(xiàng)目有apache遷移到了google code,并改名為MyBatis。
1. 簡介
????MyBatis支持普通SQL查詢,存儲過程和高級映射的優(yōu)秀持久層框架,消除了幾乎所有的JDBC代碼和參數(shù)的手動設(shè)置以及結(jié)果集的檢索。MyBatis可以使用XML或者注解用于配置和映射,將接口和JavaBean映射成數(shù)據(jù)庫的記錄。
????每一個(gè)MyBatis的應(yīng)用程序都以一個(gè)SqlSessionFactory對象的實(shí)例為核心。SqlSessionFactory對象的實(shí)例可以通過SqlSessionFactoryBuilder對象來獲得,SqlSessionFactoryBuilder對象可以從XML配置文件或從Configuration類獲得。例如:
????XML配置文件包含了對MyBatis系統(tǒng)的核心設(shè)置,有獲取數(shù)據(jù)庫連接實(shí)例的數(shù)據(jù)源和決定事務(wù)范圍和控制事務(wù)管理器。詳細(xì)內(nèi)容后面會講,這里給出一個(gè)簡單示例:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments><mappers><mapper resource="com/alvinliang/mybatis/BlogMapper.xml"/></mappers> </configuration>還有很多可以配置,上面指出了最關(guān)鍵的部分。environment元素體里包含對事務(wù)管理和連接池的環(huán)境配置。mapppers元素包含了所有mapper映射器,這些mapper的xml文件包含了SQL代碼和映射定義信息。
2. 總體流程
(1) 加載配置并初始化
??觸發(fā)條件:加載配置文件,將SQL配置文件加載成一個(gè)個(gè)MappedStatement對象。
(2) 接受調(diào)用請求
??觸發(fā)條件:調(diào)用MyBatis提供的API
? 傳入?yún)?shù):為SQL的ID和傳入?yún)?shù)對象
? 處理過程:將請求傳遞給下層的請求的處理層進(jìn)行處理。
(3) 處理操作請求
? 觸發(fā)條件:API接口層傳遞請求過來
? 傳入?yún)?shù):為SQL的ID和傳入?yún)?shù)對象
? 處理過程:
????(A)根據(jù)SQL的ID查找對應(yīng)的MappedStatement對象。
????(B)根據(jù)傳入?yún)?shù)對象解析MappedStatement對象,得到最終要執(zhí)行的SQL和執(zhí)行傳入?yún)?shù)。
????(C)獲取數(shù)據(jù)庫連接,根據(jù)得到的最終SQL語句和執(zhí)行傳入?yún)?shù)到數(shù)據(jù)庫執(zhí)行,并得到執(zhí)行結(jié)果。
????(D)根據(jù)MappedStatement對象中的結(jié)果映射配置對得到的執(zhí)行結(jié)果進(jìn)行轉(zhuǎn)換處理,并得到最終的處理結(jié)果。
????(E)釋放連接資源。
(4)返回處理結(jié)果將最終的處理結(jié)果返回。
3. 功能框架
??Mybatis可以分為三層:
(1) API接口層:提供給外部使用的接口API,開發(fā)人員可以通過本地API來操縱數(shù)據(jù)庫。
(2) 數(shù)據(jù)處理層:負(fù)責(zé)具體的SQL查找、SQL解析、SQL執(zhí)行和執(zhí)行結(jié)果映射處理等。
(3) 基礎(chǔ)支持層:負(fù)責(zé)最基本的功能支撐,包括連接管理、事務(wù)管理、配置加載和緩存處理等。
4. 簡單使用
先從SqlSessionFactory對象來獲得SqlSession的實(shí)例,SqlSession對象包含了對數(shù)據(jù)庫的所有執(zhí)行SQL操作的方法。例如:
下面給出映射的SQL語句:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.alvinliang.mybatis.BlogMapper"><select id="selectBlog" resultType="Blog">select * from Blog where id = #{id}</select> </mapper> 這里只是給出了一個(gè)簡潔的例子,其中在命名空間“com.alvinliang.mybatis.BlogMapper”中定義了一個(gè)名為“selectBlog”的映射語句,這樣它允許你使用完全限定名“com.alvinliang.mybatis.BlogMapper.selectBlog”來調(diào)用映射語句。
注意:現(xiàn)在命名空間是必須的,而且命名空間使得接口綁定成為可能,使用命名空間并將它放在合適的Java包空間下,將會使你的代碼變得簡潔,會在很長的時(shí)間內(nèi)提高M(jìn)yBatis的作用。
5. 范圍和生命周期
SqlSessionFactoryBuilder
這個(gè)類可以被實(shí)例化,使用和丟棄。一旦你創(chuàng)建了SqlSessionFactory后,這個(gè)類就不需要了。因此SqlSessionFactoryBuilder實(shí)例的最佳范圍就是方法范圍(也就是本地方法變量)。你可以重用SqlSessionFactoryBuilder來創(chuàng)建多個(gè)SqlSessionFactory實(shí)例。
SqlSessionFactory
一旦被創(chuàng)建,SqlSessionFactory應(yīng)該在你的應(yīng)用執(zhí)行期間都存在,沒有理來處理或者重新創(chuàng)建它。使用SqlSessionFactory的最佳實(shí)踐是在應(yīng)用運(yùn)行期間不要重復(fù)創(chuàng)建多次。因此SqlSessionFactory的生命周期是Application范圍。很多方法可以做到,如單例模式或者靜態(tài)單例模式。
SqlSession
每個(gè)線程都應(yīng)該有它自己的SqlSession實(shí)例。SqlSession的實(shí)例不能被共享,也是線程不安全的。因此最佳范圍應(yīng)該是request或者method范圍。絕對不能將SqlSession實(shí)例的引用放在一個(gè)類的靜態(tài)字段甚至是實(shí)例字段中。也絕對不能將SqlSession實(shí)例引用放在任何類型的管理范圍中,比如Servlet中的HttpSession。如果你正在使用Web框架,可以考慮將SqlSession放在一個(gè)和Http Request對象相似的范圍內(nèi)。下面的示例就是一個(gè)確保SqlSession關(guān)閉的基本模式:
轉(zhuǎn)載于:https://my.oschina.net/liangbo/blog/224891
總結(jié)
以上是生活随笔為你收集整理的MyBatis使用心得(一)--- 简单介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装linux桌面总结
- 下一篇: [js插件]JqueryUI日期插件