java-mybaits-00102-mybatis框架原理
阿新 • • 發佈:2017-05-06
需求變化 java hiberna 麻煩 開發 rep ati 如果能 遍歷
1、mybatis是什麽?
mybatis是一個持久層的框架,是apache下的頂級項目。是一個不完全的ORM框架。 mybatis托管到goolecode下,再後來托管到github下(https://github.com/mybatis/mybatis-3/releases)。 mybatis讓程序將主要精力放在sql上,通過mybatis提供的映射方式,自由靈活生成(半自動化,大部分需要程序員編寫sql)滿足需要sql語句。 mybatis可以將向 preparedStatement中的輸入參數自動進行輸入映射,將查詢結果集靈活映射成java對象。(輸出映射) MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,並且改名為MyBatis,實質上Mybatis對ibatis進行一些改進。 MyBatis是一個優秀的持久層框架,它對jdbc的操作數據庫的過程進行封裝,使開發者只需要關註 SQL 本身,而不需要花費精力去處理例如註冊驅動、創建connection、創建statement、手動設置參數、結果集檢索等jdbc繁雜的過程代碼。 Mybatis通過xml或註解的方式將要執行的各種statement(statement、preparedStatemnt、CallableStatement)配置起來,並通過java對象和statement中的sql進行映射生成最終執行的sql語句,最後由mybatis框架執行sql並將結果映射成java對象並返回。2、mybatis和hibernate本質區別和應用場景
hibernate
是一個標準ORM框架(對象關系映射)。入門門檻較高的,不需要程序寫sql,sql語句自動生成了。 對sql語句進行優化、修改比較困難的。 應用場景: 適用與需求變化不多的中小型項目,比如:後臺管理系統,erp、orm、oa。。mybatis
專註是sql本身,需要程序員自己編寫sql語句,sql修改、優化比較方便。mybatis是一個不完全 的ORM框架,雖然程序員自己寫sql,mybatis 也可以實現映射(輸入映射、輸出映射)。 應用場景: 適用與需求變化較多的項目,比如:互聯網項目。 註:企業進行技術選型,以低成本 高回報作為技術選型的原則,根據項目組的技術力量進行選擇。3、mybatis框架
- mybatis配置
SqlMapConfig.xml,此文件作為mybatis的全局配置文件,配置了mybatis的運行環境等信息。
mapper.xml文件即sql映射文件,文件中配置了操作數據庫的sql語句。此文件需要在SqlMapConfig.xml中加載。
- 通過mybatis環境等配置信息構造SqlSessionFactory即會話工廠
- 由會話工廠創建sqlSession即會話,操作數據庫需要通過sqlSession進行。建議sqlSession應用場合在方法體內。
- mybatis底層自定義了Executor執行器接口操作數據庫,Executor接口有兩個實現,一個是基本執行器、一個是緩存執行器。
- Mapped Statement也是mybatis一個底層封裝對象,它包裝了mybatis配置信息及sql映射信息等。mapper.xml文件中一個sql對應一個Mapped Statement對象,sql的id即是Mapped statement的id。
- Mapped Statement對sql執行輸入參數進行定義,包括HashMap、基本類型、pojo,Executor通過Mapped Statement在執行sql前將輸入的java對象映射至sql中,輸入參數映射就是jdbc編程中對preparedStatement設置參數。
- Mapped Statement對sql執行輸出結果進行定義,包括HashMap、基本類型、pojo,Executor通過Mapped Statement在執行sql後將輸出結果映射至java對象中,輸出結果映射過程相當於jdbc編程中對結果的解析處理過程。
4、Mybatis解決jdbc編程的問題
1.數據庫鏈接創建、釋放頻繁造成系統資源浪費從而影響系統性能,如果使用數據庫鏈接池可解決此問題。 解決:在SqlMapConfig.xml中配置數據鏈接池,使用連接池管理數據庫鏈接。 2.Sql語句寫在代碼中造成代碼不易維護,實際應用sql變化的可能較大,sql變動需要改變java代碼。 解決:將Sql語句配置在XXXXmapper.xml文件中與java代碼分離。 3.向sql語句傳參數麻煩,因為sql語句的where條件不一定,可能多也可能少,占位符需要和參數一一對應。 解決:Mybatis自動將java對象映射至sql語句,通過statement中的parameterType定義輸入參數的類型。 4.對結果集解析麻煩,sql變化導致解析代碼變化,且解析前需要遍歷,如果能將數據庫記錄封裝成pojo對象解析比較方便。 解決:Mybatis自動將sql執行結果映射至java對象,通過statement中的resultType定義輸出結果的類型。java-mybaits-00102-mybatis框架原理