1. 程式人生 > >Mybatis解決了JDBC編程哪些問題

Mybatis解決了JDBC編程哪些問題

不一定 方式 最終 間接 col 驅動 應用 例如 statement

一: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編程哪些問題