一.原生態的JDBC的問題
先看一個jdbc的一個實例
@Test
public void ConnectionToMysql4() {
//定義引用
Connection con=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try {
/**
* 1.連接數據庫
*/
String driverClassName=”com.mysql.jdbc.Driver”;
String url=”jdbc:mysql://localhost:3306/UserLogin”;
String username=”root”;
String password=”123456”;Class.forName(driverClassName); con=DriverManager.getConnection(url, username, password); /** * 2.得到PrepareStatement * >給出sql模板,所有參數用?代替 * >調用Connection方法,得到PrepareStatement * */
String sql=”select * from userinformation where username=? and password=?”;
pstmt=con.prepareStatement(sql);
/**
* >爲參數賦值
*/
pstmt.setString(1,”yyy”);//給第一個問號賦值
pstmt.setString(2,”123”);//給第二個問號賦值rs=pstmt.executeQuery();//調用查詢方法,向數據庫發送查詢語句
// System.out.println(sql);
System.out.println(rs.next());
// while(rs.next()){
// System.out.println(rs.getString(0)+” “+rs.getString(1));
// }} catch (Exception e) { throw new RuntimeException(e); }finally{ //關閉 try { if(rs!=null)rs.close(); if(pstmt!=null) pstmt.close(); if(con!=null) con.close(); } catch (SQLException e) { e.printStackTrace(); } }
}
2.總結jdbc的問題如下:
a.數據庫連接使用時創建,不使用時就釋放,對數據庫頻繁的開啓和關閉,造成數據庫資源的浪費,影響數據庫的性能。
改善:那麼能不能用數據庫連接池來管理呢?
b.將sql語句硬編碼到java中,如果sql語句修改了,需要重新java代碼,不利於系統維護。
改善:能不能將sql語句添加到xml配置文件中呢,即使sql語句改變了,也不需要重新編譯。
c.向preparedStatement中設置參數,用佔位符設置參數值,硬編碼到java代碼中,不利於系統的維護。
改善:能不能將sql語句及佔位符號和全部參數配置到xml文件中?
d.從ResultSet中遍歷結果數據時,存在硬編碼的問題,將獲取表的字段硬編碼,不利於系統維護。
改善:能不能將結果集自動映射成java對象。
二.mybatis的簡介
mabatis是什麼
a.mybatis是apache下的頂級項目,後託管到google、github.
b.mabatis將程序主要sql上,通過mabatis提供的映射方式,自由靈活的生成(半自動化,大部分需要程序員編寫sql)滿足需要的sql語句。
c.mybatis可以將preparestatement中輸入的參數自動進行輸入映射,將查詢結果自動映射成java對象(輸出映射)。mybatis框架圖解
至此,mybatis基本結構已介紹完。