MyBatis 之 概述

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 變成中對

            結果的解析處理。

相關文章
相關標籤/搜索