




已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Mybatis技術(shù)簡介,dezhaos,MyBatis的前世今生,MyBatis的前身就是iBatis,iBatis本是由ClintonBegin開發(fā),后來捐給Apache基金會(huì),成立了iBatis開源項(xiàng)目。2010年5月該項(xiàng)目由Apahce基金會(huì)遷移到了GoogleCode,并且改名為MyBatis。,MyBatis介紹,MyBatis是一個(gè)數(shù)據(jù)持久層(ORM)框架。把實(shí)體類和SQL語句之間建立了映射關(guān)系,是一種半自動(dòng)化的ORM實(shí)現(xiàn)。MyBatis的優(yōu)點(diǎn):1.基于SQL語法,簡單易學(xué)。2.能了解底層組裝過程。3.SQL語句封裝在配置文件中,便于統(tǒng)一管理與維護(hù),降低了程序的耦合度。4.程序調(diào)試方便。,與傳統(tǒng)JDBC的比較,減少了61%的代碼量最簡單的持久化框架架構(gòu)級(jí)性能增強(qiáng)SQL代碼從程序代碼中徹底分離,可重用增強(qiáng)了項(xiàng)目中的分工增強(qiáng)了移植性,JDBC與MyBatis直觀對比,MyBatis就是將上面這幾行代碼分解包裝:前兩行是對數(shù)據(jù)庫的數(shù)據(jù)源的管理包括事務(wù)管理,3、4兩行MyBatis通過配置文件來管理SQL以及輸入?yún)?shù)的映射,6、7、8行MyBatis獲取返回結(jié)果到Java對象的映射,也是通過配置文件管理。,與Hibernate的對比,MyBatis1、是一個(gè)SQL語句映射的框架(工具)2、注重POJO與SQL之間的映射關(guān)系。不會(huì)為程序員在運(yùn)行期自動(dòng)生成SQL3、自動(dòng)化程度低、手工映射SQL,靈活程度高.4、需要開發(fā)人員熟煉掌據(jù)SQL語句,Hibernate1、主流的ORM框架、提供了從POJO到數(shù)據(jù)庫表的全套映射機(jī)制2、會(huì)自動(dòng)生成全套SQL語句。3、因?yàn)樽詣?dòng)化程度高、映射配置復(fù)雜,api也相對復(fù)雜,靈活性低.4、開發(fā)人同不必關(guān)注SQL底層語句開發(fā),MyBatis與Hibernate的比較,Hibernate的映射關(guān)系:,MyBatis與Hibernate的比較,MyBatis的映射關(guān)系:,MyBatis工作流程,MyBatis基本要素,一、configuration.xml全局配置文件二、mapper.xml核心映射文件三、SqlSession接口,基礎(chǔ)配置文件configuration.xml,configuration.xml是系統(tǒng)的核心配置文件,包含數(shù)據(jù)源和事務(wù)管理器等設(shè)置和屬性信息,XML文檔結(jié)構(gòu)如下:configuration配置properties可以配置在Java屬性配置文件中settings修改MyBatis在運(yùn)行時(shí)的行為方式typeAliases為Java類型命名一個(gè)短的名字typeHandlers類型處理器objectFactory對象工廠plugins插件environments環(huán)境environment環(huán)境變量transactionManager事務(wù)管理器dataSource數(shù)據(jù)源mappers映射器,基礎(chǔ)配置文件環(huán)境配置,配置環(huán)境,基礎(chǔ)配置文件事務(wù)管理,MyBatis有兩種事務(wù)管理類型:JDBC-這個(gè)類型直接全部使用JDBC的提交和回滾功能。它依靠使用連接的數(shù)據(jù)源來管理事務(wù)的作用域。MANAGED-這個(gè)類型什么不做,它從不提交、回滾和關(guān)閉連接。而是讓窗口來管理事務(wù)的全部生命周期。(比如說Spring或者JAVAEE服務(wù)器),基礎(chǔ)配置文件數(shù)據(jù)源,數(shù)據(jù)源類型有三種:UNPOOLED,POOLED,JNDI。UNPOOLED-這個(gè)數(shù)據(jù)源實(shí)現(xiàn)只是在每次請求的時(shí)候簡單的打開和關(guān)閉一個(gè)連接。雖然這有點(diǎn)慢,但作為一些不需要性能和立即響應(yīng)的簡單應(yīng)用來說,不失為一種好選擇。POOLED-這個(gè)數(shù)據(jù)源緩存JDBC連接對象用于避免每次都要連接和生成連接實(shí)例而需要的驗(yàn)證時(shí)間。對于并發(fā)WEB應(yīng)用,這種方式非常流行因?yàn)樗凶羁斓捻憫?yīng)時(shí)間。JNDI-這個(gè)數(shù)據(jù)源實(shí)現(xiàn)是為了準(zhǔn)備和Spring或應(yīng)用服務(wù)一起使用,可以在外部也可以在內(nèi)部配置這個(gè)數(shù)據(jù)源,然后在JNDI上下文中引用它。這個(gè)數(shù)據(jù)源配置只需要兩上屬性:,基礎(chǔ)配置文件SQL映射文件,SQL映射文件:/1.使用相對路徑/2.使用全路徑,SQL映射文件,SQL映射文件結(jié)構(gòu):cache-配置給定命名空間的緩存。cache-ref從其他命名空間引用緩存配置。resultMap最復(fù)雜,也是最有力量的元素,用來描述如何從數(shù)據(jù)庫結(jié)果集中來加載對象。sql可以重用的SQL塊,也可以被其他語句引用。insert映射插入語句update映射更新語句delete映射刪除語句select映射查詢語句,SQL映射文件,Selectselect*fromBlogwhereid=#id使用完全限定名調(diào)用映射語句1.Blogblog=(Blog)session.selectOne(org.mybatis.example.BlogMapper.selectBlog,101);StringblogName=blog.getBlogName();,SQL映射文件,Selectselect*fromBlogwhereid=#id調(diào)用:Mapmap=(Map)session.selectOne(org.mybatis.example.BlogMapper.selectBlog,101);StringblogName=Map.get(“BLOG_NAME);,SQL映射文件,InsertinsertintoAuthor(id,username,password,email,bio)values(#id,#username,#password,#email,#bio)主鍵策略:如果使用的數(shù)據(jù)庫支持自動(dòng)生成主鍵,那么就可以設(shè)置useGeneratedKeys=”true”,然后把keyProperty設(shè)成對應(yīng)的列。insertintoAuthor(username,password,email,bio)values(#username,#password,#email,#bio),SQL映射文件,UpdateDeletedeletefromAuthorwhereid=#id,動(dòng)態(tài)SQL,MyBatis的一個(gè)強(qiáng)大的特性之一通常是它的動(dòng)態(tài)SQL能力ifchoose(when,otherwise)trim(where,set)foreach,SQL映射文件,SQL:這個(gè)元素用來定義一個(gè)可以復(fù)用的SQL語句段,供其它語句調(diào)用。比如:id,username,password這個(gè)語句塊,可以包含到別的語句中,比如:selectfromsome_tablewhereid=#id,動(dòng)態(tài)SQL,IfSELECT*FROMBLOGWHEREstate=“ACTIVE”ANDtitlelike#titleANDtitlelike#,動(dòng)態(tài)SQL,whereSELECT*FROMBLOGstate=#stateANDtitlelike#title,緩存cache,緩存技術(shù)是一種“以空間換時(shí)間”的設(shè)計(jì)理念,利用內(nèi)存空間資源來提高數(shù)據(jù)檢索速度的有效手段之一。MyBatis默認(rèn)情況下是沒有開啟緩存的,除了局部的session緩存。要開啟二級(jí)緩存,你需要在你的SQL映射文件中添加一行:,緩存cache,例如:這個(gè)配置創(chuàng)建了一個(gè)FIFO緩存,并每隔60秒刷新,存取512個(gè)結(jié)果對象或列表的引用,而且返回的對象為只讀,因此在不同線程中的調(diào)用者之間修改它們會(huì)導(dǎo)致沖突。,緩存cache,可用的收回策略LRU最近最少使用的:移除最長時(shí)間不被使用的對象;FIFO先進(jìn)先出:按對象進(jìn)入緩存的順序來移除它;SOFT軟引用:移除基于垃圾回收器狀態(tài)和軟引用規(guī)則的對象;WEAK弱引用:更積極地移除基于垃圾收集器狀態(tài)和弱引用規(guī)則的對象;默認(rèn)的是LRU。,核心接口和類的結(jié)構(gòu),核心類的生命周期,SqlSessionFactoryBuilder的生命周期:這個(gè)類可以被初始、使用和丟棄,如果你已經(jīng)創(chuàng)建好了一個(gè)SqlSessionFactory后就不用再保留它。因此,SqlSessionFactoryBuilder的最好作用域是方法體內(nèi),比如說定義一個(gè)方法變量。你可以重復(fù)使用SqlSessionFactoryBuilder生成多個(gè)SqlSessionFactory實(shí)例,但是最好不要強(qiáng)行保留,因?yàn)閄ML的解析資源要用來做其它更重要的事。,SqlSessionFactory的生命周期,SqlSessionFactory:一旦創(chuàng)建,SqlSessionFactory就會(huì)在整個(gè)應(yīng)用過程中始終存在。所以沒有理由去銷毀和再創(chuàng)建它,一個(gè)應(yīng)用運(yùn)行中也不建議多次創(chuàng)建SqlSessionFactory。如果真的那樣做,會(huì)顯得很拙劣。因此SqlSessionFactory最好的作用域是Application??梢杂卸喾N方法實(shí)現(xiàn)。最簡單的方法是單例模式或者是靜態(tài)單例模式。然而這既不是廣泛贊成和好用的。反而,使用GoogleGuice或Spring來進(jìn)行依賴反射會(huì)更好。這些框架允許你生成管理器來管理SqlSessionFactory的單例生命周期。,SqlSession的生命周期,SqlSession:每個(gè)線程都有自己的SqlSession實(shí)例,SqlSession實(shí)例是不能被共享,也不是線程安全的。因此最好使用Request作用域或者方法體作用域。不要使用類的靜態(tài)變量來引用一個(gè)SqlSession實(shí)例,甚至不要使用類的一個(gè)實(shí)例變更來引用。如果你正在使用WEB框架,應(yīng)該讓SqlSession跟隨HTTP請求的相似作用域。也就是說,在收到一個(gè)HTTP請求過后,打開SqlSession,等返回一個(gè)回應(yīng)以后,立馬關(guān)掉這個(gè)SqlSession。關(guān)閉SqlSession是非常重要的。你必須要確保SqlSession在finally方法體中正常關(guān)閉??梢允褂孟旅娴臉?biāo)準(zhǔn)方式來關(guān)閉:SqlSessionsession=sqlSessionFactory.openSession();try/doworkfinallysession.close();,SqlSession接口,SqlSession的獲取方式:Readerreader=Resources.getResourceAsReader(“configuration.xml);SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(reader);SqlSessionsqlSession=sqlSessionFactory.openSession();sqlSession的使用:調(diào)用insert,update,selectList,selectOne,delete等方法執(zhí)行增刪改查等操作。,SqlSession接口主要方法,新增:intinsert(Stringstatement,Objectparameter)修改:intupdate(Stringstatement,Objectparameter)刪除:intdelete(Stringstatement,Objectparameter)查詢:ListselectList(Stringstatement,Objectparameter),sqlSession方法調(diào)用實(shí)例,publicListfind(StringsqlId,Objectparam)throwsMybatisExceptionSqlSessionsqlSession=sqlSessionFactory.openSession();tryListlist=sqlSession.selectList(sqlId,param);if(list!=null)returnlist;elsereturnnewArrayList();catch(RuntimeExceptione)e.printStackTrace();thrownewMybatisException(HsErrorMsg.SQL_ERROR,sqlId:+sqlId);finallysqlSession.close();,技巧分享,提取SQL的方法:Configurationconfiguration=sqlSession.getConfiguration();MappedStatementms=configuration.getMappedStatement(sqlId);BoundSqlboundSql=ms.getBoundSql(param);Stringsql=boundSql.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國木制收音機(jī)數(shù)據(jù)監(jiān)測報(bào)告
- 2025年中國曲型淬火機(jī)市場調(diào)查研究報(bào)告
- 2025年中國晶體元器件市場調(diào)查研究報(bào)告
- 新疆第二醫(yī)學(xué)院《深度學(xué)習(xí)應(yīng)用基礎(chǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年中國早強(qiáng)型防水劑數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025年中國數(shù)碼多功能電纜專用路徑儀數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025屆東北三省名校聯(lián)盟高三9月聯(lián)合考-英語試卷含答案
- 口吃預(yù)防和措施
- 肇慶市實(shí)驗(yàn)中學(xué)高中生物:第六章復(fù)習(xí)(第一課時(shí))教案
- 統(tǒng)編版語文一年級(jí)下期末測試卷(二)附答案
- 舞臺(tái)藝術(shù)與表演技巧教程
- 無人機(jī)駕駛員培訓(xùn)計(jì)劃及大綱
- 公路工程技術(shù)標(biāo)準(zhǔn)(JTG B01-2003)
- 應(yīng)收款項(xiàng)-應(yīng)收款項(xiàng)減值
- 江蘇省書法水平等級(jí)證書考試-硬筆書法考試專用紙-(123級(jí))
- 紹興古城歷史建筑和傳統(tǒng)民居
- 13J104《蒸壓加氣混凝土砌塊、板材構(gòu)造》
- (完整word)軟件驗(yàn)收單
- 全套IATF16949內(nèi)審核檢查表(含審核記錄)
- 第一章醫(yī)學(xué)統(tǒng)計(jì)學(xué)方法的基本概念和基本步驟講課課件
- 高中數(shù)學(xué)說題課件
評論
0/150
提交評論