Java01(持久層框架Mybatis)_第1頁
Java01(持久層框架Mybatis)_第2頁
Java01(持久層框架Mybatis)_第3頁
Java01(持久層框架Mybatis)_第4頁
Java01(持久層框架Mybatis)_第5頁
已閱讀5頁,還剩52頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、J2EE 持久層框架MybatisJ2EE簡介o 什么是J2eeo 為什么要有J2EE課題收集系統代碼分析o 代碼行數分析o 模型層bean分析o 服務層分析o 控制層分析o 展示層分析服務層代碼分析o 獲取數據庫連接o 執行sql語句o 結果與bean綁定o 返回執行結果理想的服務層代碼o 只關注核心(即:sql指令)o 數據庫連接、代碼執行、結果綁定最好自動完成Java反射技術介紹o JAVA反射機制是在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意一個方法;這種動態獲取的信息以及動態調用對象的方法的功能稱為java語言的反射機制。Jav

2、a反射技術介紹o 反射技術演示o 獲取對象的屬性n o.getClass().getDeclaredFields()o 獲取對象的方法n Method methods = o.getClass().getMethods();o 執行對象的方法o 綜合演示,將map綁定到bean對象課堂練習o 使用反射技術實現Map和javaBean對象的動態綁定并使用jsp展示出來我們自己數據庫持久層框架示意圖常見數據庫持久層框架介紹o Mybatisn 學習曲線低n 運行性能好o Hibernaten 學習曲線高n 使用簡單o activeRecordn 學習曲線低n 普及率低Mybatis初始化o 使用x

3、ml初始化n 編寫mybatis.xmln 編寫bean文件n 編寫具體的mapper文件n 編寫mapper對應的接口n 初始化mybatisn 獲取SqlSessionFactoryn 獲取SqlSessionn 執行對應方法獲取數據第一個mybatis程序o 實現項目類別管理模塊o 使用mybatis重構原有部分代碼Mybatis中的關鍵對象o SqlSessionFactoryBuildern 該類用于創建sqlSessionFactoryo sqlSessionFactoryn 該類用于創建sqlSessiono sqlSessionn 該類用于執行sql代碼常用對象的生命周期oSq

4、lSessionFactoryBuildern這個類可以被實例化、使用和丟棄,一旦創建了 SqlSessionFactory,就不再需要它了。因此 SqlSessionFactoryBuilder 實例的最佳范圍是方法范圍(也就是局部方法變量)。你可以重用 SqlSessionFactoryBuilder 來創建多個 SqlSessionFactory 實例,但是最好還是不要讓其一直存在以保證所有的 XML 解析資源開放給更重要的事情。osqlSessionFactorynSqlSessionFactory 一旦被創建就應該在應用的運行期間一直存在,沒有任何理由對它進行清除或重建。使用 Sql

5、SessionFactory 的最佳實踐是在應用運行期間不要重復創建多次,多次重建 SqlSessionFactory 被視為一種代碼“壞味道(bad smell)”。因此 SqlSessionFactory 的最佳范圍是應用范圍。有很多方法可以做到,最簡單的就是使用單例模式或者靜態單例模式。osqlSessionn每個線程都應該有它自己的 SqlSession 實例。所以它的最佳的范圍是請求或方法范圍。Mybatis配置文件詳解o configuration 配置o properties 屬性o settings 設置o typeAliases 類型命名o typeHandlers 類型處理

6、器o objectFactory 對象工廠o plugins 插件configurationo Mybatis配置文件的根節點,其它節點均應包含在該節點內propertieso 這些屬性都是可外部配置且可動態替換的,既可以在典型的 Java 屬性文件中配置,亦可通過 properties 元素的子元素來傳遞o settingso 用于設置mybatis的基本參數。不指定該參數時均使用默認值。n 建議:使用mybatis的默認值typeAliaseso 類型別名,用于mapper文件中的輸入輸出nn n n n n n ntypeHandlerso 類型處理。無論是 MyBatis 在預處理語句

7、(PreparedStatement)中設置一個參數時,還是從結果集中取出一個值時, 都會用類型處理器將獲取的值以合適的方式轉換成 Java 類型類型處理器類型處理器Java 類型類型JDBC 類型類型BooleanTypeHandlerjava.lang.Boolean, boolean數據庫兼容的 BOOLEANByteTypeHandlerjava.lang.Byte, byte數據庫兼容的 NUMERIC 或 BYTEShortTypeHandlerjava.lang.Short, short數據庫兼容的 NUMERIC 或 SHORT INTEGERIntegerTypeHandle

8、rjava.lang.Integer, int數據庫兼容的 NUMERIC 或 INTEGER自定義typeHandlerso 對于一些特殊類型可實現自己的typeHandlers以取代mybatis默認的typeHandlers行為。(了解)pluginso MyBatis 允許你在已映射語句執行過程中的某一點進行攔截調用。默認情況下,MyBatis 允許使用插件來攔截的方法調用包括(高級部分詳細講解):nExecutor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)nP

9、arameterHandler (getParameterObject, setParameters)nResultSetHandler (handleResultSets, handleOutputParameters)nStatementHandler (prepare, parameterize, batch, update, query)配置環境(environments)o MyBatis 的數據庫連接參數配置,mybatis可以連接多個不同的數據庫(POOLED):n 配置環境(environments)o MyBatis 的數據庫連接參數配置,mybatis可以連接多個不同的數據

10、庫(JNDI):n 映射器(mappers)o 告訴mybatis在哪里尋找sql映射語句:n單個引入n n批量引入o o oMapper映射文件詳解o 查詢(select)o 更新(insert, update and delete)o 參數(Parameters)o 結果集(Result Maps)o 自動映射(Auto-mapping)o cacheselectSelect屬性表屬性屬性描述描述id在命名空間中唯一的標識符,可以被用來引用這條語句。parameterType將會傳入這條語句的參數類的完全限定名或別名。這個屬性是可選的,因為 MyBatis 可以通過 TypeHandler

11、 推斷出具體傳入語句的參數,默認值為 unset。parameterMap這是引用外部 parameterMap 的已經被廢棄的方法。使用內聯參數映射和 parameterType 屬性。resultType從這條語句中返回的期望類型的類的完全限定名或別名。注意如果是集合情形,那應該是集合可以包含的類型,而不能是集合本身。使用 resultType 或 resultMap,但不能同時使用。resultMap外部 resultMap 的命名引用。結果集的映射是 MyBatis 最強大的特性,對其有一個很好的理解的話,許多復雜映射的情形都能迎刃而解。使用 resultMap 或 resultTyp

12、e,但不能同時使用。flushCache將其設置為 true,任何時候只要語句被調用,都會導致本地緩存和二級緩存都會被清空,默認值:false。Select屬性表useCache將其設置為 true,將會導致本條語句的結果被二級緩存,默認值:對 select 元素為 true。statementTypeSTATEMENT,PREPARED 或 CALLABLE 的一個。這會讓 MyBatis 分別使用 Statement,PreparedStatement 或 CallableStatement,默認值:PREPARED。resultSets 這個設置僅對多結果集的情況適用,它將列出語句執行后

13、返回的結果集并每個結果集給一個名稱,名稱是逗號分隔的。insertupdatedelete參數說明useGeneratedKeys(僅對 insert 和 update 有用)這會令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法來取出由數據庫內部生成的主鍵(比如:像 MySQL 和 SQL Server 這樣的關系數據庫管理系統的自動遞增字段),默認值:false。keyProperty(僅對 insert 和 update 有用)唯一標記一個屬性,MyBatis 會通過 getGeneratedKeys 的返回值或者通過 insert 語句的 selectKey

14、 子元素設置它的鍵值,默認:unset。如果希望得到多個生成的列,也可以是逗號分隔的屬性名稱列表。keyColumn(僅對 insert 和 update 有用)通過生成的鍵值設置表中的列名,這個設置僅在某些數據庫(像 PostgreSQL)是必須的,當主鍵列不是表中的第一列的時候需要設置。如果希望得到多個生成的列,也可以是逗號分隔的屬性名稱列表。自動增長字段設置oo insert into Author (username,password,email,bio)o values (#username,#password,#email,#bio)o自動增長字段設置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 這個元素可以被用來定義可重用的 SQL 代碼段,可以包含在其他語句中。它可以被靜態地(在加載參數) 參數化. o $alias.id,$alias.username,$alias.password oo sel

16、ecto ,o o from some_table t1o cross join some_table t2oSql中的參數o 簡單類型基本寫法n Select * from tb01 where id=#ido 綁定原理n 將輸入的參數(int,string等)轉換為與id相匹配的類型。Sql中的參數o 復合類型處理過程nn insert into users (id, username, password)n values (#id, #username, #password)no 綁定原理n 使用#username等方式可訪問參數類型為”User”的對象的屬性值,如一個bean對象。Sq

17、l中參數的高級寫法o 顯式指定參數類型n#property,javaType=int,jdbcType=NUMERICo 指定參數的處理器n#age,javaType=int,jdbcType=NUMERIC,typeHandler=MyTypeHandlero 指定小數位數n #height,javaType=double,jdbcType=NUMERIC,numericScale=2Sql中字符串替換的寫法o 基本寫法nORDER BY $columnNameo 字符串替換注意事項n勿使用客戶端提交的參數作為字符串替換以防止sql注入o 指定小數位數n #height,javaType=d

18、ouble,jdbcType=NUMERIC,numericScale=2Sql中like的寫法o SELECT o * o FROM o user o WHERE o name like CONCAT(%,#name,%) ResultMapoconstructor - 類在實例化時,用來注入結果到構造方法中nidArg - ID 參數;標記結果作為 ID 可以幫助提高整體效能narg - 注入到構造方法的一個普通結果oid 一個 ID 結果;標記結果作為 ID 可以幫助提高整體效能oresult 注入到字段或 JavaBean 屬性的普通結果oassociation 一個復雜的類型關聯;許

19、多結果將包成這種類型ocollection 復雜類型的集odiscriminator 使用結果值來決定使用哪個結果映射ncase 基于某些值的結果映射n嵌入結果映射 這種情形結果也映射它本身,因此可以包含很多相 同的元素,或者它可以參照一個外部的結果映射。ResultMapo注意:在select中使用resultMap時需要將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動態sqlo 什么是動態sql?o Mybatis下動態sql指令n Ifn choose, when, otherwisen trim, where, setn Foreachn Bindifo 根據指定的條件拼接sqloo SELECT * FROM BLOG WHERE state = ACTIVE o o AND title like #titleo o o AND author_name like #o ochooseo 根據指定的條件拼接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 問題的產生oo SELECT * FROM BLOG o WHERE o o state = #stateo o o

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論