1、原始的JDBC鏈接數據庫
java
public static void main(String[] args) { Connection conn = null; CallableStatement cs = null; String tableName = "emp"; //分頁每頁顯示的記錄數 int pageSize = 5; //頁數 int pageNum = 3; int rowSum, pageCount; try { //加載驅動 Class.forName("oracle.jdbc.driver.OracleDriver"); //得到鏈接 conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "dog", "dog"); cs = conn.prepareCall("{call PRO_PAGING(?, ?, ?, ?, ?, ? )}"); cs.setString(1, tableName); cs.setInt(2, pageSize); cs.setInt(3, pageNum); //返回結果 參數設置 //總記錄數 cs.registerOutParameter(4, oracle.jdbc.OracleTypes.INTEGER); //總頁數 cs.registerOutParameter(5, oracle.jdbc.OracleTypes.INTEGER); //結果集 cs.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR); cs.execute(); //獲得結果 rowSum = cs.getInt(4); pageCount = cs.getInt(5); System.out.println("總記錄數: " + rowSum + " ---- 總頁數: " + pageCount); ResultSet rs = (ResultSet) cs.getObject(6); while (rs.next()) { System.out.println("員工號:" + rs.getInt(1) + " 員工姓名:" + rs.getString(2) + " 職位:" + rs.getString(3) + " 領導工號:" + rs.getString(4) + " 入職日期:" + rs.getString(5) + " 工資:" + rs.getString(6) + " 獎金:" + rs.getString(7) + " 部門號:" + rs.getString(8)); } } catch (Exception e) { e.printStackTrace(); } finally { try { cs.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }
總結:使用原始的JDBC鏈接數據庫,優缺點:sql
1. 優勢:性能較高,由於框架封裝較多,會必定程度的影響性能。
數據庫
2. 缺點:
apache
a. 須要手動建立、關閉數據庫鏈接,形成代碼重複;並且數據庫鏈接不能共享,若是使用數據庫鏈接池就可編程
以實現數據庫鏈接共享,從而減小系統開銷,提升性能。
緩存
b. sql語句寫在代碼中,不易於維護,每次修改sql需編譯代碼。---將sql語句抽取出來,使用一個xml和 properties文件配置。mybatis
c. sql執行是須要的參數經過手動拼接,操做不方便。---自動化將Java對象(pojo)設置到sql中,將參數自架構
動對應到sql語句的佔位符。oracle
d. 使用Statement預加載向sql設置參數必須保證參數類型正確,而且個數和佔位符對應,編程困難
app
e. 對結果集解析處理不方便,須要制定獲取字段的類型、順序。---將結果集自動的轉換爲Java對象
(pojo),解析pojo經過get方法獲取值。
2、MyBatis介紹:
MyBatis是apache的一個開源項目iBatis,2010年這個項目由apache software foundation 遷移到google code,
而且更名爲MyBatis。
MyBatis是一個優秀的持久層框架,它對JDBC操做數據庫的過程進行封裝,使開發者只須要關注SQL自己,而不需
要話費精力去處理例如註冊驅動、建立connection、建立Statement、手動設置參數、結果集檢索等JDBC繁雜的過程
代碼。
Mybatis經過xml或註解的方式將要執行的statement配置起來,並經過java對象和statement中的sql進行映射生成
最終執行的sql語句,最後由MyBatis框架執行sql並將結果集映射成Java對象返回。
3、MyBatis架構
1. MyBatis配置:
SqlMappingConfig.xml,此文件做爲mybatis的全局配置文件,配置了mybatis的運行環境等信息。
mapper.xml文件即sql映射文件,文件中配置了操做數據庫的sql語句。此文件須要在SqlMappingConfig.xml
中加載。
2. 經過mybatis環境等配置信息構造SqlSessionFactory,即會化工廠。
3. 由會話工廠建立SqlSession,即會話。操做數據庫須要經過SqlSession進行。
4. mybatis底層自定義了Executor接口操做數據庫,Executor接口有兩個實現,一個是基本實現,一個是緩存實現。
5. Mapped Statement也是mybatis一個底層對象,它封裝了mybatis配置信息以及 sql 映射信息等。mapper.xml
文件中一個 sql 對應一個Mapped Statement對象,sql 的 id 便是Mappeed Statement的 id。
6. Mappeed Statement對sql執行輸入參數進行定義,包括HashMap、基本類型、pojo。Executor經過Mapped Statement 在執行 sql 前將輸入的java對象映射至 sql 中,輸入參數映射就是 JDBC 編程中對
PreparedStatemetn設置參數。
7. Mapped Statement對sql執行輸出結果進行定義,包括HashMap、基本類型、pojo。Executor經過
Mapped Statement 在執行 sql 後將輸出結果映射至 java 對象中,輸出結果映射過程至關於 JDBC 變成中對
結果的解析處理。