




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、J2EE 持久層框架MybatisJ2EE簡介o 什么是J2eeo 為什么要有J2EE課題收集系統(tǒng)代碼分析o 代碼行數(shù)分析o 模型層bean分析o 服務(wù)層分析o 控制層分析o 展示層分析服務(wù)層代碼分析o 獲取數(shù)據(jù)庫連接o 執(zhí)行sql語句o 結(jié)果與bean綁定o 返回執(zhí)行結(jié)果理想的服務(wù)層代碼o 只關(guān)注核心(即:sql指令)o 數(shù)據(jù)庫連接、代碼執(zhí)行、結(jié)果綁定最好自動(dòng)完成Java反射技術(shù)介紹o JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對于任意一個(gè)對象,都能夠調(diào)用它的任意一個(gè)方法;這種動(dòng)態(tài)獲取的信息以及動(dòng)態(tài)調(diào)用對象的方法的功能稱為java語言的反射機(jī)制。Jav
2、a反射技術(shù)介紹o 反射技術(shù)演示o 獲取對象的屬性n o.getClass().getDeclaredFields()o 獲取對象的方法n Method methods = o.getClass().getMethods();o 執(zhí)行對象的方法o 綜合演示,將map綁定到bean對象課堂練習(xí)o 使用反射技術(shù)實(shí)現(xiàn)Map和javaBean對象的動(dòng)態(tài)綁定并使用jsp展示出來我們自己數(shù)據(jù)庫持久層框架示意圖常見數(shù)據(jù)庫持久層框架介紹o Mybatisn 學(xué)習(xí)曲線低n 運(yùn)行性能好o Hibernaten 學(xué)習(xí)曲線高n 使用簡單o activeRecordn 學(xué)習(xí)曲線低n 普及率低Mybatis初始化o 使用x
3、ml初始化n 編寫mybatis.xmln 編寫bean文件n 編寫具體的mapper文件n 編寫mapper對應(yīng)的接口n 初始化mybatisn 獲取SqlSessionFactoryn 獲取SqlSessionn 執(zhí)行對應(yīng)方法獲取數(shù)據(jù)第一個(gè)mybatis程序o 實(shí)現(xiàn)項(xiàng)目類別管理模塊o 使用mybatis重構(gòu)原有部分代碼Mybatis中的關(guān)鍵對象o SqlSessionFactoryBuildern 該類用于創(chuàng)建sqlSessionFactoryo sqlSessionFactoryn 該類用于創(chuàng)建sqlSessiono sqlSessionn 該類用于執(zhí)行sql代碼常用對象的生命周期oSq
4、lSessionFactoryBuildern這個(gè)類可以被實(shí)例化、使用和丟棄,一旦創(chuàng)建了 SqlSessionFactory,就不再需要它了。因此 SqlSessionFactoryBuilder 實(shí)例的最佳范圍是方法范圍(也就是局部方法變量)。你可以重用 SqlSessionFactoryBuilder 來創(chuàng)建多個(gè) SqlSessionFactory 實(shí)例,但是最好還是不要讓其一直存在以保證所有的 XML 解析資源開放給更重要的事情。osqlSessionFactorynSqlSessionFactory 一旦被創(chuàng)建就應(yīng)該在應(yīng)用的運(yùn)行期間一直存在,沒有任何理由對它進(jìn)行清除或重建。使用 Sql
5、SessionFactory 的最佳實(shí)踐是在應(yīng)用運(yùn)行期間不要重復(fù)創(chuàng)建多次,多次重建 SqlSessionFactory 被視為一種代碼“壞味道(bad smell)”。因此 SqlSessionFactory 的最佳范圍是應(yīng)用范圍。有很多方法可以做到,最簡單的就是使用單例模式或者靜態(tài)單例模式。osqlSessionn每個(gè)線程都應(yīng)該有它自己的 SqlSession 實(shí)例。所以它的最佳的范圍是請求或方法范圍。Mybatis配置文件詳解o configuration 配置o properties 屬性o settings 設(shè)置o typeAliases 類型命名o typeHandlers 類型處理
6、器o objectFactory 對象工廠o plugins 插件configurationo Mybatis配置文件的根節(jié)點(diǎn),其它節(jié)點(diǎn)均應(yīng)包含在該節(jié)點(diǎn)內(nèi)propertieso 這些屬性都是可外部配置且可動(dòng)態(tài)替換的,既可以在典型的 Java 屬性文件中配置,亦可通過 properties 元素的子元素來傳遞o settingso 用于設(shè)置mybatis的基本參數(shù)。不指定該參數(shù)時(shí)均使用默認(rèn)值。n 建議:使用mybatis的默認(rèn)值typeAliaseso 類型別名,用于mapper文件中的輸入輸出nn n n n n n ntypeHandlerso 類型處理。無論是 MyBatis 在預(yù)處理語句
7、(PreparedStatement)中設(shè)置一個(gè)參數(shù)時(shí),還是從結(jié)果集中取出一個(gè)值時(shí), 都會(huì)用類型處理器將獲取的值以合適的方式轉(zhuǎn)換成 Java 類型類型處理器類型處理器Java 類型類型JDBC 類型類型BooleanTypeHandlerjava.lang.Boolean, boolean數(shù)據(jù)庫兼容的 BOOLEANByteTypeHandlerjava.lang.Byte, byte數(shù)據(jù)庫兼容的 NUMERIC 或 BYTEShortTypeHandlerjava.lang.Short, short數(shù)據(jù)庫兼容的 NUMERIC 或 SHORT INTEGERIntegerTypeHandle
8、rjava.lang.Integer, int數(shù)據(jù)庫兼容的 NUMERIC 或 INTEGER自定義typeHandlerso 對于一些特殊類型可實(shí)現(xiàn)自己的typeHandlers以取代mybatis默認(rèn)的typeHandlers行為。(了解)pluginso MyBatis 允許你在已映射語句執(zhí)行過程中的某一點(diǎn)進(jìn)行攔截調(diào)用。默認(rèn)情況下,MyBatis 允許使用插件來攔截的方法調(diào)用包括(高級部分詳細(xì)講解):nExecutor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)nP
9、arameterHandler (getParameterObject, setParameters)nResultSetHandler (handleResultSets, handleOutputParameters)nStatementHandler (prepare, parameterize, batch, update, query)配置環(huán)境(environments)o MyBatis 的數(shù)據(jù)庫連接參數(shù)配置,mybatis可以連接多個(gè)不同的數(shù)據(jù)庫(POOLED):n 配置環(huán)境(environments)o MyBatis 的數(shù)據(jù)庫連接參數(shù)配置,mybatis可以連接多個(gè)不同的數(shù)據(jù)
10、庫(JNDI):n 映射器(mappers)o 告訴mybatis在哪里尋找sql映射語句:n單個(gè)引入n n批量引入o o oMapper映射文件詳解o 查詢(select)o 更新(insert, update and delete)o 參數(shù)(Parameters)o 結(jié)果集(Result Maps)o 自動(dòng)映射(Auto-mapping)o cacheselectSelect屬性表屬性屬性描述描述id在命名空間中唯一的標(biāo)識符,可以被用來引用這條語句。parameterType將會(huì)傳入這條語句的參數(shù)類的完全限定名或別名。這個(gè)屬性是可選的,因?yàn)?MyBatis 可以通過 TypeHandler
11、 推斷出具體傳入語句的參數(shù),默認(rèn)值為 unset。parameterMap這是引用外部 parameterMap 的已經(jīng)被廢棄的方法。使用內(nèi)聯(lián)參數(shù)映射和 parameterType 屬性。resultType從這條語句中返回的期望類型的類的完全限定名或別名。注意如果是集合情形,那應(yīng)該是集合可以包含的類型,而不能是集合本身。使用 resultType 或 resultMap,但不能同時(shí)使用。resultMap外部 resultMap 的命名引用。結(jié)果集的映射是 MyBatis 最強(qiáng)大的特性,對其有一個(gè)很好的理解的話,許多復(fù)雜映射的情形都能迎刃而解。使用 resultMap 或 resultTyp
12、e,但不能同時(shí)使用。flushCache將其設(shè)置為 true,任何時(shí)候只要語句被調(diào)用,都會(huì)導(dǎo)致本地緩存和二級緩存都會(huì)被清空,默認(rèn)值:false。Select屬性表useCache將其設(shè)置為 true,將會(huì)導(dǎo)致本條語句的結(jié)果被二級緩存,默認(rèn)值:對 select 元素為 true。statementTypeSTATEMENT,PREPARED 或 CALLABLE 的一個(gè)。這會(huì)讓 MyBatis 分別使用 Statement,PreparedStatement 或 CallableStatement,默認(rèn)值:PREPARED。resultSets 這個(gè)設(shè)置僅對多結(jié)果集的情況適用,它將列出語句執(zhí)行后
13、返回的結(jié)果集并每個(gè)結(jié)果集給一個(gè)名稱,名稱是逗號分隔的。insertupdatedelete參數(shù)說明useGeneratedKeys(僅對 insert 和 update 有用)這會(huì)令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法來取出由數(shù)據(jù)庫內(nèi)部生成的主鍵(比如:像 MySQL 和 SQL Server 這樣的關(guān)系數(shù)據(jù)庫管理系統(tǒng)的自動(dòng)遞增字段),默認(rèn)值:false。keyProperty(僅對 insert 和 update 有用)唯一標(biāo)記一個(gè)屬性,MyBatis 會(huì)通過 getGeneratedKeys 的返回值或者通過 insert 語句的 selectKey
14、 子元素設(shè)置它的鍵值,默認(rèn):unset。如果希望得到多個(gè)生成的列,也可以是逗號分隔的屬性名稱列表。keyColumn(僅對 insert 和 update 有用)通過生成的鍵值設(shè)置表中的列名,這個(gè)設(shè)置僅在某些數(shù)據(jù)庫(像 PostgreSQL)是必須的,當(dāng)主鍵列不是表中的第一列的時(shí)候需要設(shè)置。如果希望得到多個(gè)生成的列,也可以是逗號分隔的屬性名稱列表。自動(dòng)增長字段設(shè)置oo insert into Author (username,password,email,bio)o values (#username,#password,#email,#bio)o自動(dòng)增長字段設(shè)置oo o SELECT MAX
15、(IFNULL(id,0)+1 from tb01 o insert into Authoro (id, username, password, email,bio, favourite_section)o valueso (#id, #username, #password, #email, #bio, #favouriteSection,jdbcType=VARCHAR)osqlo 這個(gè)元素可以被用來定義可重用的 SQL 代碼段,可以包含在其他語句中。它可以被靜態(tài)地(在加載參數(shù)) 參數(shù)化. o $alias.id,$alias.username,$alias.password oo sel
16、ecto ,o o from some_table t1o cross join some_table t2oSql中的參數(shù)o 簡單類型基本寫法n Select * from tb01 where id=#ido 綁定原理n 將輸入的參數(shù)(int,string等)轉(zhuǎn)換為與id相匹配的類型。Sql中的參數(shù)o 復(fù)合類型處理過程nn insert into users (id, username, password)n values (#id, #username, #password)no 綁定原理n 使用#username等方式可訪問參數(shù)類型為”User”的對象的屬性值,如一個(gè)bean對象。Sq
17、l中參數(shù)的高級寫法o 顯式指定參數(shù)類型n#property,javaType=int,jdbcType=NUMERICo 指定參數(shù)的處理器n#age,javaType=int,jdbcType=NUMERIC,typeHandler=MyTypeHandlero 指定小數(shù)位數(shù)n #height,javaType=double,jdbcType=NUMERIC,numericScale=2Sql中字符串替換的寫法o 基本寫法nORDER BY $columnNameo 字符串替換注意事項(xiàng)n勿使用客戶端提交的參數(shù)作為字符串替換以防止sql注入o 指定小數(shù)位數(shù)n #height,javaType=d
18、ouble,jdbcType=NUMERIC,numericScale=2Sql中l(wèi)ike的寫法o SELECT o * o FROM o user o WHERE o name like CONCAT(%,#name,%) ResultMapoconstructor - 類在實(shí)例化時(shí),用來注入結(jié)果到構(gòu)造方法中nidArg - ID 參數(shù);標(biāo)記結(jié)果作為 ID 可以幫助提高整體效能narg - 注入到構(gòu)造方法的一個(gè)普通結(jié)果oid 一個(gè) ID 結(jié)果;標(biāo)記結(jié)果作為 ID 可以幫助提高整體效能oresult 注入到字段或 JavaBean 屬性的普通結(jié)果oassociation 一個(gè)復(fù)雜的類型關(guān)聯(lián);許
19、多結(jié)果將包成這種類型ocollection 復(fù)雜類型的集odiscriminator 使用結(jié)果值來決定使用哪個(gè)結(jié)果映射ncase 基于某些值的結(jié)果映射n嵌入結(jié)果映射 這種情形結(jié)果也映射它本身,因此可以包含很多相 同的元素,或者它可以參照一個(gè)外部的結(jié)果映射。ResultMapo注意:在select中使用resultMap時(shí)需要將resultType換成resultMapResultMap示例(一)o ResultMap示例(二)o SELECT a.id AS subject_id,a.title AS subject_title,b.news_id,c.title AS news_title
20、FROMSUBJECT a LEFT JOIN subject_news b ON a.id=b.subject_id LEFT JOIN news c ON b.news_id=c.id Mybatis動(dòng)態(tài)sqlo 什么是動(dòng)態(tài)sql?o Mybatis下動(dòng)態(tài)sql指令n Ifn choose, when, otherwisen trim, where, setn Foreachn Bindifo 根據(jù)指定的條件拼接sqloo SELECT * FROM BLOG WHERE state = ACTIVE o o AND title like #titleo o o AND author_name like #o ochooseo 根據(jù)指定的條件拼接sqloo SELECT * FROM BLOG WHERE state = ACTIVEo o o AND title like #titleo o o AND author_name like #o o o AND featured = 1o o owhereo 問題的產(chǎn)生oo SELECT * FROM BLOG o WHERE o o state = #stateo o o
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 合同備案表(技術(shù)許可與合作)
- 2025年信息網(wǎng)絡(luò)建設(shè)合同協(xié)議
- 2025年個(gè)體戶商業(yè)店鋪策劃收購合同書
- 2025年二手房交易合同附加條件范例
- 2025年協(xié)作創(chuàng)業(yè)店鋪合同樣式
- 2025年個(gè)人房產(chǎn)抵押貸款合同完整版范本
- 2025年住宅環(huán)衛(wèi)服務(wù)合同
- 2025年中介土地開發(fā)合同示范文本
- 銷售違約合同模板
- 2025年醫(yī)院消防安全管理合同樣本
- 發(fā)展?jié)h語 初級讀寫一 第二課 謝謝你
- 部編版六年級語文下冊第一單元大單元教學(xué)任務(wù)單
- 人教版小學(xué)語文1-6年級背誦內(nèi)容完整版
- 2023徐金桂“徐徐道來”(行政法知識點(diǎn))版
- 《事故汽車常用零部件修復(fù)與更換判別規(guī)范》
- 2024-2030年中國酒類流通行業(yè)發(fā)展動(dòng)態(tài)及投資盈利預(yù)測研究報(bào)告
- 物業(yè)管理如何實(shí)現(xiàn)降本增效
- DL-T825-2021電能計(jì)量裝置安裝接線規(guī)則
- 信息科技重大版 七年級下冊 互聯(lián)網(wǎng)應(yīng)用與創(chuàng)新 第一單元單元教學(xué)設(shè)計(jì) 互聯(lián)網(wǎng)創(chuàng)新應(yīng)用
- 2024年興業(yè)銀行股份有限公司校園招聘考試試題及參考答案
- 2024智慧城市城市交通基礎(chǔ)設(shè)施智能監(jiān)測技術(shù)要求
評論
0/150
提交評論