擁有了JDBC,為什麼還要有Hibernate和Mybatis等持久層框架?
阿新 • • 發佈:2019-01-09
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,從簡單的使用用例著手,結合原始碼來分析其內部實現原理,敬請關注。