1. 程式人生 > >mybatis與jdbc的比較

mybatis與jdbc的比較

mybatis與jdbc的比較

       JDBC是Java提供的一個操作資料庫的API;

       MyBatis是一個支援 普通SQL查詢儲存過程高階對映的優秀 持久層框架。MyBatis消除了幾乎所有的JDBC程式碼和引數的手工設定以及對結果集的檢索封裝。MyBatis可以使用簡單的 XML或註解用於配置和原始對映,將介面和Java的POJO(Plain Old JavaObjects,普通的Java物件)對映成資料庫中的記錄

1、JDBC實現查詢分析

我們先看看我們最熟悉也是最基礎的通過JDBC查詢資料庫資料,一般需要以下七個步驟:

(1)  載入JDBC驅動

(2)  建立並獲取資料庫連線

(3)  建立 JDBC Statements 物件

(4)  設定SQL語句的傳入引數

(5)  執行SQL語句並獲得查詢結果

(6)  對查詢結果進行轉換處理並將處理結果返回

(7)  釋放相關資源(關閉Connection,關閉Statement,關閉ResultSet)

2、MyBatis是對JDBC的封裝。相對於JDBC,MyBatis有以下優點:

1). 優化獲取和釋放

我們一般在訪問資料庫時都是通過資料庫連線池來操作資料庫,資料庫連線池有好幾種,比如C3P0、DBCP,也可能採用容器本身的JNDI資料庫連線池。我們可以通過DataSource進行隔離解耦,我們統一從DataSource裡面獲取資料庫連線,DataSource具體由DBCP實現還是由容器的JNDI實現都可以,所以我們將DataSource的具體實現通過讓使用者配置來應對變化。

2).SQL統一管理,對資料庫進行存取操作

我們使用JDBC對資料庫進行操作時,SQL查詢語句分佈在各個Java類中,這樣可讀性差,不利於維護,當我們修改Java類中的SQL語句時要重新進行編譯。

Mybatis可以把SQL語句放在配置檔案中統一進行管理,以後修改配置檔案,也不需要重新就行編譯部署。

3).傳入引數對映和生成動態SQL語句

     很多情況下,我們都可以通過在SQL語句中設定佔位符來達到使用傳入引數的目的,這種方式本身就有一定侷限性,它是按照一定順序傳入引數的,要與佔位符一一匹配。但是,如果我們傳入的引數是不確定的(比如列表查詢,根據使用者填寫的查詢條件不同,傳入查詢的引數也是不同的,有時是一個引數、有時可能是三個引數),那麼我們就得在後臺程式碼中自己根據請求的傳入引數去拼湊相應的SQL語句,這樣的話還是避免不了在Java程式碼裡面寫SQL語句的命運。既然我們已經把SQL語句統一存放在配置檔案或者資料庫中了,怎麼做到能夠根據前臺傳入引數的不同,動態生成對應的SQL語句

     我們在查詢中可能需要根據一些屬性進行組合查詢,比如我們進行商品查詢,我們可以根據商品名稱進行查詢,也可以根據發貨地進行查詢,或者兩者組合查詢。如果使用JDBC進行查詢,這樣就需要寫多條SQL語句。

Mybatis可以在配置檔案中通過使用<if test=””></if>標籤進行SQL語句的拼接,生成動態SQL語句。比如下面這個例子:

<select id="getCountByInfo"parameterType="User" resultType="int">
        select count(*) from user
        <where>
            <iftest="nickname!=null">
                andnickname = #{nickname}
            </if>
            <iftest="email!=null">
                andemail = #{email}
            </if>
        </where>

</select>

就是通過暱稱或email或者二者的組合查詢使用者數。

4)、能夠對結果集進行對映

     我們在使用JDBC進行查詢時,返回一個結果集ResultSet,我們要從結果集中取出結果封裝為需要的型別

在Mybatis中我們可以設定將結果直接對映為自己需要的型別,比如:JavaBean物件、一個Map、一個List等等。像上個例子中就是將結果對映為int型別。


參考網址:

http://blog.csdn.net/u011277123/article/details/72523227