已閱讀5頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Mybatis技術(shù)簡(jiǎn)介,dezhaos,MyBatis的前世今生,MyBatis的前身就是iBatis,iBatis本是由ClintonBegin開(kāi)發(fā),后來(lái)捐給Apache基金會(huì),成立了iBatis開(kāi)源項(xiàng)目。2010年5月該項(xiàng)目由Apahce基金會(huì)遷移到了GoogleCode,并且改名為MyBatis。,MyBatis介紹,MyBatis是一個(gè)數(shù)據(jù)持久層(ORM)框架。把實(shí)體類和SQL語(yǔ)句之間建立了映射關(guān)系,是一種半自動(dòng)化的ORM實(shí)現(xiàn)。MyBatis的優(yōu)點(diǎn):1.基于SQL語(yǔ)法,簡(jiǎn)單易學(xué)。2.能了解底層組裝過(guò)程。3.SQL語(yǔ)句封裝在配置文件中,便于統(tǒng)一管理與維護(hù),降低了程序的耦合度。4.程序調(diào)試方便。,與傳統(tǒng)JDBC的比較,減少了61%的代碼量最簡(jiǎn)單的持久化框架架構(gòu)級(jí)性能增強(qiáng)SQL代碼從程序代碼中徹底分離,可重用增強(qiáng)了項(xiàng)目中的分工增強(qiáng)了移植性,JDBC與MyBatis直觀對(duì)比,MyBatis就是將上面這幾行代碼分解包裝:前兩行是對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)源的管理包括事務(wù)管理,3、4兩行MyBatis通過(guò)配置文件來(lái)管理SQL以及輸入?yún)?shù)的映射,6、7、8行MyBatis獲取返回結(jié)果到Java對(duì)象的映射,也是通過(guò)配置文件管理。,與Hibernate的對(duì)比,MyBatis1、是一個(gè)SQL語(yǔ)句映射的框架(工具)2、注重POJO與SQL之間的映射關(guān)系。不會(huì)為程序員在運(yùn)行期自動(dòng)生成SQL3、自動(dòng)化程度低、手工映射SQL,靈活程度高.4、需要開(kāi)發(fā)人員熟煉掌據(jù)SQL語(yǔ)句,Hibernate1、主流的ORM框架、提供了從POJO到數(shù)據(jù)庫(kù)表的全套映射機(jī)制2、會(huì)自動(dòng)生成全套SQL語(yǔ)句。3、因?yàn)樽詣?dòng)化程度高、映射配置復(fù)雜,api也相對(duì)復(fù)雜,靈活性低.4、開(kāi)發(fā)人同不必關(guān)注SQL底層語(yǔ)句開(kāi)發(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對(duì)象工廠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ù)源來(lái)管理事務(wù)的作用域。MANAGED-這個(gè)類型什么不做,它從不提交、回滾和關(guān)閉連接。而是讓窗口來(lái)管理事務(wù)的全部生命周期。(比如說(shuō)Spring或者JAVAEE服務(wù)器),基礎(chǔ)配置文件數(shù)據(jù)源,數(shù)據(jù)源類型有三種:UNPOOLED,POOLED,JNDI。UNPOOLED-這個(gè)數(shù)據(jù)源實(shí)現(xiàn)只是在每次請(qǐng)求的時(shí)候簡(jiǎn)單的打開(kāi)和關(guān)閉一個(gè)連接。雖然這有點(diǎn)慢,但作為一些不需要性能和立即響應(yīng)的簡(jiǎn)單應(yīng)用來(lái)說(shuō),不失為一種好選擇。POOLED-這個(gè)數(shù)據(jù)源緩存JDBC連接對(duì)象用于避免每次都要連接和生成連接實(shí)例而需要的驗(yàn)證時(shí)間。對(duì)于并發(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.使用相對(duì)路徑/2.使用全路徑,SQL映射文件,SQL映射文件結(jié)構(gòu):cache-配置給定命名空間的緩存。cache-ref從其他命名空間引用緩存配置。resultMap最復(fù)雜,也是最有力量的元素,用來(lái)描述如何從數(shù)據(jù)庫(kù)結(jié)果集中來(lái)加載對(duì)象。sql可以重用的SQL塊,也可以被其他語(yǔ)句引用。insert映射插入語(yǔ)句update映射更新語(yǔ)句delete映射刪除語(yǔ)句select映射查詢語(yǔ)句,SQL映射文件,Selectselect*fromBlogwhereid=#id使用完全限定名調(diào)用映射語(yǔ)句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ù)庫(kù)支持自動(dòng)生成主鍵,那么就可以設(shè)置useGeneratedKeys=”true”,然后把keyProperty設(shè)成對(duì)應(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è)元素用來(lái)定義一個(gè)可以復(fù)用的SQL語(yǔ)句段,供其它語(yǔ)句調(diào)用。比如:id,username,password這個(gè)語(yǔ)句塊,可以包含到別的語(yǔ)句中,比如: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)存空間資源來(lái)提高數(shù)據(jù)檢索速度的有效手段之一。MyBatis默認(rèn)情況下是沒(méi)有開(kāi)啟緩存的,除了局部的session緩存。要開(kāi)啟二級(jí)緩存,你需要在你的SQL映射文件中添加一行:,緩存cache,例如:這個(gè)配置創(chuàng)建了一個(gè)FIFO緩存,并每隔60秒刷新,存取512個(gè)結(jié)果對(duì)象或列表的引用,而且返回的對(duì)象為只讀,因此在不同線程中的調(diào)用者之間修改它們會(huì)導(dǎo)致沖突。,緩存cache,可用的收回策略LRU最近最少使用的:移除最長(zhǎng)時(shí)間不被使用的對(duì)象;FIFO先進(jìn)先出:按對(duì)象進(jìn)入緩存的順序來(lái)移除它;SOFT軟引用:移除基于垃圾回收器狀態(tài)和軟引用規(guī)則的對(duì)象;WEAK弱引用:更積極地移除基于垃圾收集器狀態(tài)和弱引用規(guī)則的對(duì)象;默認(rèn)的是LRU。,核心接口和類的結(jié)構(gòu),核心類的生命周期,SqlSessionFactoryBuilder的生命周期:這個(gè)類可以被初始、使用和丟棄,如果你已經(jīng)創(chuàng)建好了一個(gè)SqlSessionFactory后就不用再保留它。因此,SqlSessionFactoryBuilder的最好作用域是方法體內(nèi),比如說(shuō)定義一個(gè)方法變量。你可以重復(fù)使用SqlSessionFactoryBuilder生成多個(gè)SqlSessionFactory實(shí)例,但是最好不要強(qiáng)行保留,因?yàn)閄ML的解析資源要用來(lái)做其它更重要的事。,SqlSessionFactory的生命周期,SqlSessionFactory:一旦創(chuàng)建,SqlSessionFactory就會(huì)在整個(gè)應(yīng)用過(guò)程中始終存在。所以沒(méi)有理由去銷毀和再創(chuàng)建它,一個(gè)應(yīng)用運(yùn)行中也不建議多次創(chuàng)建SqlSessionFactory。如果真的那樣做,會(huì)顯得很拙劣。因此SqlSessionFactory最好的作用域是Application??梢杂卸喾N方法實(shí)現(xiàn)。最簡(jiǎn)單的方法是單例模式或者是靜態(tài)單例模式。然而這既不是廣泛贊成和好用的。反而,使用GoogleGuice或Spring來(lái)進(jìn)行依賴反射會(huì)更好。這些框架允許你生成管理器來(lái)管理SqlSessionFactory的單例生命周期。,SqlSession的生命周期,SqlSession:每個(gè)線程都有自己的SqlSession實(shí)例,SqlSession實(shí)例是不能被共享,也不是線程安全的。因此最好使用Request作用域或者方法體作用域。不要使用類的靜態(tài)變量來(lái)引用一個(gè)SqlSession實(shí)例,甚至不要使用類的一個(gè)實(shí)例變更來(lái)引用。如果你正在使用WEB框架,應(yīng)該讓SqlSession跟隨HTTP請(qǐng)求的相似作用域。也就是說(shuō),在收到一個(gè)HTTP請(qǐng)求過(guò)后,打開(kāi)SqlSession,等返回一個(gè)回應(yīng)以后,立馬關(guān)掉這個(gè)SqlSession。關(guān)閉SqlSession是非常重要的。你必須要確保SqlSession在finally方法體中正常關(guān)閉??梢允褂孟旅娴臉?biāo)準(zhǔn)方式來(lái)關(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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度綠色生態(tài)泥工班組施工管理合同范本4篇
- 二零二五年度廚師餐飲行業(yè)培訓(xùn)與咨詢合同書4篇
- 二零二五年度文化演出面包車租賃及現(xiàn)場(chǎng)支持合同
- 2025年度派遣制員工服務(wù)合同模板3篇
- 2025版農(nóng)機(jī)具銷售與技術(shù)支持服務(wù)合同范本4篇
- 2025年度河道清淤土方工程簡(jiǎn)易合同范本
- 2025年度建筑材料倉(cāng)儲(chǔ)物流合同范本3篇
- 二零二五年度農(nóng)民工勞動(dòng)權(quán)益保護(hù)與維權(quán)服務(wù)合同
- 2025年度木材供應(yīng)鏈金融服務(wù)合同3篇
- 2025年個(gè)人股權(quán)質(zhì)押借款標(biāo)準(zhǔn)合同范本2篇
- 湖北省黃石市陽(yáng)新縣2024-2025學(xué)年八年級(jí)上學(xué)期數(shù)學(xué)期末考試題 含答案
- 硝化棉是天然纖維素硝化棉制造行業(yè)分析報(bào)告
- 央視網(wǎng)2025亞冬會(huì)營(yíng)銷方案
- 《00541語(yǔ)言學(xué)概論》自考復(fù)習(xí)題庫(kù)(含答案)
- 《無(wú)砟軌道施工與組織》 課件 第十講雙塊式無(wú)砟軌道施工工藝
- 江蘇省南京市、鹽城市2023-2024學(xué)年高三上學(xué)期期末調(diào)研測(cè)試+英語(yǔ)+ 含答案
- 2024新版《藥品管理法》培訓(xùn)課件
- 《阻燃材料與技術(shù)》課件 第7講 阻燃橡膠材料
- 爆炸物運(yùn)輸安全保障方案
- 借名買車的協(xié)議書范文范本
- 江蘇省南京市2025屆高三學(xué)業(yè)水平調(diào)研考試數(shù)學(xué)試卷(解析版)
評(píng)論
0/150
提交評(píng)論