在學習任何一種ORM的時候,免不了的都要讓我們想起原生態的JDBC是如何寫的,因爲只有這樣你才能感覺出來爲什麼要有這個ORM新的產品,諸如學習hibernate、等等。jbdc顧名思義的意思是java的數據庫連接(java database connectity)。它是一種執行sql的java的API,可以爲多種數據庫提供統一的訪問基準。
一般jdbc的執行流程是這樣的:1、加載數據庫的驅動;2、建立數據庫連接;3、向數據庫發起sql要求;4、獲取返回數據庫處理的結果;5、處理返回的結果;6、釋放資源。
按照這個思路咱們手寫一個小程序:查詢用戶名爲helloWord的用戶,並且輸出這個用戶的信息(id、用戶名)。
代碼如下:
package cn.bj.mybatis.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* <p>單獨的jdbc程序</p>
* @author woniu
* @date 2015-06-10
* @version 1.0
*/
public class DataBase {
public static void main(String[] args) {
Connection connection = null;//連接
PreparedStatement ps = null;//預編譯的statement
ResultSet rs = null;//結果集
try {
//1、註冊驅動
Class.forName("com.mysql.jdbc.Driver");
//2、通過驅動管理類獲取數據庫的連接
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8","root","root");
//3、建立sql語句,向數據庫發起要求;獲取預處理的statement
String sql = "select * from user where username = ? ";
ps = connection.prepareStatement(sql);
ps.setString(1, "helloworld");
//4、獲取結果集
rs = ps.executeQuery();
//5、處理結果集
while(rs.next()){
System.out.println(rs.getString("id") + " " + rs.getString("username"));
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally{
//6、釋放資源
if(rs !=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(ps != null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(connection != null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
寫完這段代碼進行一下總結,用jdbc方式編碼的缺點:
1、數據庫的連接,使用時就創建不使用時就釋放,一開一閉,對數據庫進行頻繁的操作,導致資源嚴重的被浪費。
2、sql語句被寫到了java的代碼中,如果數據庫的表改變了,那麼就得重新的編寫java類。
3、sql語句設置參數比較麻煩,必須的確定參數的位置,要不然會出錯。
4、獲取結果時存在大量的手工操作,如果一張表裏有10幾個字段的話,手工就得寫10幾條rs.get語句,造成大量的重複工作。
就是因爲這樣,現在許多ORM產品誕生了,學習他們就是因爲他們帶來很多簡便的操作,下面就開始mybatis學習之旅了。