Mybatis解決了JDBC編程哪些問題
一:Mybatis簡介
MyBatis是一個優秀的持久層框架,它對jdbc的操作數據庫的過程進行封裝,使開發者只需要關註 SQL 本身,而不需要花費精力去處理例如註冊驅動、創建connection、創建statement、手動設置參數、結果集檢索等jdbc繁雜的過程代碼。
(1)Mybatis通過xml映射文件或註解的方式將要執行的各種statement(內含sql語句)配置起來;
(2)通過java對象(輸入)和statement中的sql進行映射生成最終執行的sql語句;
(3)最後由mybatis框架執行sql並將結果映射成java對象(輸出)並返回。
其中的java對象一般是每個數據庫表對應的pojo類,當然輸入(sql參數)一般為pojo類或其中的屬性,輸出(sql結果)可以為pojo類、其中屬性或list。
二、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定義輸出結果的類型。
三、原始Dao開發和Mapper動態代理的方法
1、原始Dao開發:
(1)映射文件:sql語句;sql語句的輸入參數類型;sql語句的輸出類型。
(2)dao接口:定義有哪些數據操作方法的方法名,輸入參數類型,返回(輸出)類型,這和映射文件中的sql是對應的。
(3)dao接口的實現類:用註入的工廠創建會話,用會話的增刪改查方法實現dao接口中定義的方法。
註:這裏說向statement中傳遞參數,我們在映射文件中寫的是SQL,但是我們操作的對象是statement,可以理解為在java中我們用statement把sql包了起來,在java中操作statement間接操作sql。
2、Mapper動態代理方式:
(1)Mapper映射文件:Mapper.xml,和dao的映射文件相同。
(2)Mapper接口:Mapper.java,也和dao的接口文件相同。
區別:不用寫接口的實現類,不過在用實現類的時候,比上面dao用的時候多兩步步,(1)建立會話(2)獲取mapper接口的代理對象,然後就可以調用代理對象的方法了(等同於調用dao接口實現類裏的方法)。
Mapper接口開發需要遵循以下規範:
(1)Mapper.xml文件中的namespace與mapper接口的類路徑相同。(namespace+id才能定位到我們要操作的statement)
(2)Mapper接口方法名和Mapper.xml中定義的每個statement的id相同
(3)Mapper接口方法的輸入參數類型和mapper.xml中定義的每個sql 的parameterType的類型相同
(4)Mapper接口方法的輸出參數類型和mapper.xml中定義的每個sql的resultType的類型相同
Mybatis解決了JDBC編程哪些問題