為什么要用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 怎么運行呢?怎么使用?高雅的使用?
請聽下回分解