走進MyBatis

前言

這篇文章我們一起走進MyBatis世界,熟悉MyBatis

1.1 楔子(鋪墊)

學習 MyBatis 之前,我們可以通過從查看原來使用JDBC 操作持久層的代碼,再次重溫一下 JDBC 的噩夢。

1. 1. 1 JDBC編程

保存操作:

public int addActor(Actor actor) {
		conn=this.getConnection();
		PreparedStatement ps=null;
		int count=0;
		try {
			String sql="INSERT INTO actor VALUES(DEFAULT,?,?,?)";
			ps=conn.prepareStatement(sql);
			ps.setString(1, actor.getAname());
			ps.setString(2, actor.getAbrief());
			ps.setString(3, actor.getAimage());
			count=ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{ 
			closeAll(conn, ps, null);
		}
		return count;
	}

查詢操作:

public Movice getJieAndImage(int id) {
		conn=this.getConnection();
		PreparedStatement ps=null;
		ResultSet rs=null;
		Movice movice=null;
		try {
			String sql="SELECT * FROM movice where mvid=?";
			ps=conn.prepareStatement(sql);
			ps.setInt(1, id);
			rs=ps.executeQuery();
			while (rs.next()) {
				movice=new Movice(rs.getInt("mvid"),rs.getString("mname"),rs.getString("mbrief"),rs.getString("mpianChang"),rs.getInt("director"),rs.getInt("actor"),rs.getString("mShangTime"),rs.getInt("mtype"),rs.getInt("mregion"),rs.getString("mImage"),rs.getFloat("grade"),rs.getFloat("mPrice"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			closeAll(conn, ps, rs);
		}
		return movice;
	}

1. 1. 2 框架

什麼是框架,框架從何而來,爲什麼使用框架?
框架(framework):

  1. 是一系列 jar 包,其本質是對 JDK 功能的拓展。
  2. 框架是一組程序的集合,包含了一系列的最佳實踐,作用是解決某一個領域的問題。

1. 1. 3 最佳實踐

最佳實踐(Best Practice):

實際上是無數程序員經歷過無數次嘗試之後,總結出來的處理特定問題的特定方法。
如果把程序員的自由發揮看作是一條通往成功的途徑,最佳實踐就是其中的最短路徑,能極大的解放生產力。Web 開發中的最佳實踐:根據職責的縱向劃分:控制層、業務層、持久層:

  • 控制層 :web/mvc: 負責處理與界面交互的相關操作 (Struts2/Spring MVC)
  • 業務層 :service: 負責複雜的業務邏輯計算和判斷 (Spring)
  • 持久層 :dao: 負責將業務邏輯數據進行持久化存儲 (MyBatis/Hibernate)
    在這裏插入圖片描述

1. 2 ORM 思想

對象關係映射(Object Relational Mapping,簡稱 ORM):

  1. 是一種爲了解決面向對象與關係數據庫存在的互不匹配的問題的技術。
  2. 簡單的說,ORM 是通過使用描述對象和數據庫之間映射的元素,將 Java 程序中的對象自動持久化到關係數據庫中。
    在這裏插入圖片描述
    ORM 主要解決對象 - 關係的映射:
    在這裏插入圖片描述
  • O(對象模型):實體對象,即我們在程序中根據數據庫表結構建立的一個個實體Entity。

  • R(關係型數據庫的數據結構):即我們建立的數據庫表。

  • M(映射):從R(數據庫)到O(對象模型)的映射,可通過XML文件映射。

1. 2 . 3 常見 ORM 框架

把對象數據庫的操作封裝成一套 API,具有操作數據庫的增刪改查等操作,而且具有獨立性,當持久層技術層發生改變時,不用修改任何業務層代碼。

  1. JPA:本身是一種 ORM 規範,不是 ORM 框架。由各大 ORM 框架提供實現。
  2. Hibernate:目前最流行的 ORM 框架。設計靈巧,性能優秀,文檔豐富。
  3. MyBatis 目前最受歡迎的持久層解決方案。

1 . 3 MyBatis 概述

1.3.1.認識 MyBatis

  1. MyBatis 是支持普通 SQL 查詢,存儲過程和高級映射的持久層框架,嚴格上說應該是一個 SQL 映射框架。其前身是 iBatis,也就是淘寶使用的持久層框架,而這隻需要簡單的使用 XML 或註解配置就可以完成。
  2. 幾乎所有的 JDBC 代碼和參數的手工設置以及結果集的處理都可以交給 MyBatis 完成
  3. 和 Hibernate 相比更簡單、更底層、性能更優異,因此更深入人心,更受企業的青睞。
  4. GitHub 地址爲 https://github.com/mybatis

1.3. 2 包括了 MyBatis 很多子項目:

  1. mybatis-3:MyBatis 框架
  2. generator:代碼生成器
  3. spring:MyBatis 和 Spring 集成的組件
  4. spring-boot-starter:MyBatis 和 Spring Boot 集成的組件
  5. mybatipse:MyBatis 的 Eclipse 插件

1.3. 3 中文文檔:

1.3. 4 MyBatis 架構圖

在這裏插入圖片描述

1.3. 5 MyBatis 核心組件

  1. SqlSessionFactoryBuilder(構建器):根據配置信息或 Java 代碼來構建 SqlSessionFactory 對象。
    作用:創建 SqlSessionFactory 對象。
  2. SqlSessionFactory(會話工廠):好比是 DataSource,線程安全的,在應用運行期間不要重複創建多次,
    建議使用單例模式。
    作用:創建 SqlSession 對象
  3. SqlSession(會話):好比是 Connection,線程不安全的,每次使用開啓新的 SqlSession 對象,使用完畢正常關閉,默認使用 DefaultSqlSession。提供操作數據庫的增刪改查方法,可以調用操作方法,也可以操作 Mapper 組件。
    作用:操作數據庫
  4. Executor(執行器):
    SqlSession 本身不能直接操作數據庫,需要 Executor 來完成,該接口有兩個實現:緩存執行器(缺省)、基本執行器。
  5. MappedStatement:映射語句封裝執行語句時的信息如 SQL、輸入參數、輸出結果。

1.3.6 MyBatis 原理圖

在這裏插入圖片描述

更具體的底層原理圖:
在這裏插入圖片描述

涉及到的對象講解:
  • SqlSession:表示和數據庫交互的會話,完成必要數據庫增刪改查功能。
  • Executor:執行器,是 MyBatis 調度的核心,負責 SQL 語句的生成和查詢緩存的維護。
  • StatementHandler:語句處理器,封裝了 JDBC 的 DML、DQL 操作、參數設置。
  • ParameterHandler:參數處理器,把用戶傳入參數轉換爲 JDBC 需要的參數值。
  • ResultSetHandler:結果集處理器,把結果集中的數據封裝到 List 集合。
  • TypeHandler:類型轉換器,Java 類型和 JDBC 類型的相互轉換。
  • MappedStatement:映射語句對象,維護了一條<insert|update|delete|select>節點的封裝
  • SqlSource:SQL 源,根據用戶傳入的參數生成 SQL 語句,並封裝到 BoundSql 中。
  • BoundSql:SQL 綁定,封裝 SQL 語句和對應的參數信息。
  • Configuration:MyBatis 全局配置對象,封裝所有配置信息。

在這裏插入圖片描述

總結

這篇博文主要讓我們瞭解MyBatis,瞭解即可,重點在後面的文章中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章