1. 程式人生 > >擁有了JDBC,為什麼還要有Hibernate和Mybatis等持久層框架?

擁有了JDBC,為什麼還要有Hibernate和Mybatis等持久層框架?

JDBC,我想對於學Java的人簡直太熟悉了,如果誰說不知道,那麼狠遺憾的告訴你,你不是Java人!

這篇文章的主要目的還是想把大家引入後面我們重點要說的內容,那就是Mybatis和Hibernate兩個持久層框架。既然要研究這兩個框架,那麼就該知道為什麼會出現這兩個框架。

我記得,我剛步入Java的時候,那時候操作資料庫是按照找個步驟寫的:

(1)註冊驅動;

(2)獲取資料庫連線;

(3)拼接sql語句,設定sql引數;

(4)執行sql語句;

(5)處理sql返回結果;

(6)關閉執行語句和資料庫連線;


就像下面的一個簡單示例一樣:

private static Connection getConn() {
    String driver = "com.mysql.jdbc.Driver";
    String url = "jdbc:mysql://localhost:3306/samp_db";
    String username = "root";
    String password = "";
    Connection conn = null;
    try {
        Class.forName(driver); //classLoader,載入對應驅動
        conn = (Connection) DriverManager.getConnection(url, username, password);
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return conn;
}

然後獲取到連線後再進行相應的sql操作,這裡簡單了拿插入語句來說吧:
private static int insert(Student student) {
    Connection conn = getConn();
    int i = 0;
    String sql = "insert into students (Name,Sex,Age) values(?,?,?)";
    PreparedStatement pstmt;
    try {
        pstmt = (PreparedStatement) conn.prepareStatement(sql);
        pstmt.setString(1, student.getName());
        pstmt.setString(2, student.getSex());
        pstmt.setString(3, student.getAge());
        i = pstmt.executeUpdate();
        pstmt.close();
        conn.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return i;
}

從上面的語句可以看出來,我們每次都要做大量的相同的操作,並且還要對執行sql語句過程中所出現的各種異常和資源釋放進行處理,而真正涉及到業務功能的程式碼其實很少,這明顯影響了效率。

每當這時候都會有牛人出來,幫助大夥解決問題。這時候Hibernate和Mybatis(前身ibatis)變橫空出世了。它們幫我們把哪些複雜的重複性的工作進行了抽象,從業務處理邏輯中剝離了,使得我們不需要再寫這些我們不想寫還非要寫的程式碼。

下面簡單說說這兩個框架。

Mybatis的前身其實是apache下面的一個開源專案ibatis,後來遷移到了Google Code,並且改名為了Mybatis。再之後,又被遷移到了GitHub。

Hibernate是澳大利亞墨爾本的一個年輕程式設計師開始的,正是和我們一樣他也厭倦了這樣寫資料庫操作,所以寫了Hibernate的第一個版本,而後其他成員加入進來共同完善了Hibernate,Hibernate也變得原來越流行,我們常說的SSH中的H指的就是它了。

在接下來的日子裡,我將分別開設兩個專欄分別講述Mybatis和Hibernate,從簡單的使用用例著手,結合原始碼來分析其內部實現原理,敬請關注。