MyBatis 初窺 (一)

為什么要用Mybatis?

??看一段JDBC的代碼

public class DbUtil {

    public static final String URL = "jdbc:mysql://localhost:3306/imooc";
    public static final String USER = "liulx";
    public static final String PASSWORD = "123456";

    public static void main(String[] args) throws Exception {
        // 1.加載驅(qū)動程序
        Class.forName("com.mysql.jdbc.Driver");
        // 2. 獲得數(shù)據(jù)庫連接
        Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
        // 3.操作數(shù)據(jù)庫,實現(xiàn)增刪改查
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM imooc_goddess");
        // 如果有數(shù)據(jù),rs.next()返回true
        while(rs.next()){
            System.out.println(rs.getString("user_name")+" 年齡:"+rs.getInt("age"));
        }

        // 關(guān)閉連接
        rs.close();
        stmt.close();
        conn.close();
    }
}

再封裝一次

public class DbUtil {
    public static final String URL = "jdbc:mysql://localhost:3306/imooc";
    public static final String USER = "liulx";
    public static final String PASSWORD = "123456";
    private static Connection conn = null;
    static{
        try {
            //1.加載驅(qū)動程序
            Class.forName("com.mysql.jdbc.Driver");
            //2. 獲得數(shù)據(jù)庫連接
            conn = DriverManager.getConnection(URL, USER, PASSWORD);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection(){
        return conn;
    }

    public static void close(Connection connection) {
        try {
            if (connection != null && !connection.isClosed()) {
                connection.close();
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

}

java提供了jdbc來與數(shù)據(jù)庫通訊,使用jdbc操作數(shù)據(jù)庫數(shù)據(jù)需要五步:

??1.加載驅(qū)動。
??2.獲取數(shù)據(jù)庫連接。
??3.操作數(shù)據(jù)庫,增刪改查。
??4.處理結(jié)果集
??5.關(guān)閉連接

看了上面的代碼,分析一下,在功能越來越多的情況下會造成什么問題?

重復(fù)代碼
??每次獲取連接,處理結(jié)果集,關(guān)閉連接這些代碼都重復(fù)的,當我們的功能越來越多,會出現(xiàn)大量的代碼冗余。

資源管理
??數(shù)據(jù)庫連接是非常占用資源的,尤其是在高并發(fā)的情況下,如果每次都去建立數(shù)據(jù)庫連接就會有性能問題。

后面提出了連接池的解決方案。

Result Set 結(jié)果集映射
??ResultSet需要轉(zhuǎn)換成POJO,都需要手動處理,會產(chǎn)生大量的重復(fù)代碼,并且無法重用。

SQL和代碼耦合
??SQL和業(yè)務(wù)代碼耦合在一起,違反高內(nèi)聚、低耦合的程序設(shè)計思想。

還是那個問題為什么要用Mybatis?????

??使用原生JDBC在我們?nèi)找鏉u大復(fù)雜的系統(tǒng),頻繁的開關(guān)數(shù)據(jù)庫連接、各種復(fù)雜的Resultset、業(yè)務(wù)需求的改動、SQL代碼和冗余代碼的過多,已經(jīng)各位禿頭不堪重負,所以要減負?。。?!

怎么減負?

??Apache提出了DBUtils工具類,大大減少了操作數(shù)據(jù)庫的代碼,但是工具類也只是簡單的封裝JDBC,并不解渴,真正解放雙手的是ORM概念的提出。

工具類解決了:支持數(shù)據(jù)源、方法封裝、映射結(jié)果集
工具類沒解決:SQL硬編碼、參數(shù)只能順序傳入、沒有提供緩存功能、ORM映射沒有實現(xiàn)(實體類到數(shù)據(jù)庫映射)。

??(Object Relational Mapping ORM)概念和框架推出,結(jié)合連接池的時候可以解決大部分JDBC的問題,節(jié)省了大量的開發(fā)時間和成本,甚至有的框架可以實現(xiàn)消滅SQL。

??如今市場上的框架大部分使用:Mybatis、Jpa、Hibernate。
在這里我就不討論其他框架的優(yōu)缺點了,后面會開一篇文章專門解釋其優(yōu)缺點。

我們來聊聊Mybatis可以給我們帶來什么?

看看MyBatis的特性:

??1.使用連接池對連接進行管理。
??2.SQL和代碼分離,集中管理。
??3.參數(shù)映射和動態(tài)SQL。
??4.結(jié)果集映射。
??5.緩存管理。
??6.重復(fù)的SQL提取。
??7.插件機制。

mybatis 怎么運行呢?怎么使用?高雅的使用?

請聽下回分解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容