MyBatis 概念

簡介

什麼是 MyBatis?

MyBatis 是一款優秀的持久層框架,它支持定製化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和映射原生類型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 對象)爲數據庫中的記錄。

使用方式

  • 編程式:通過代碼手動注入配置,創建 SqlSessionFactory、SqlSession、Mapper 等對象。
  • 集成式:集成 Spring 等容器

Mapper 的 XML 和 Annotation 形式

Mapper 的使用形式要統一,不要既使用 XML 形式又使用 Annotation 形式,容易出錯。建議項目中使用 XML 形式,項目中肯定會出現複雜 SQL,而 XML 對複雜 SQL 的可讀性更好。

兼容形式

Mapper 的 XML 和 Annotation 是互補的兼容形式,同一個方法名不能既存在 XML 又存在 Annotation。

優缺點

核心組件

概述

  • SqlSessionFactoryBuilder(構造器):它會根據配置信息或者代碼來生成 SqlSessionFactory(工廠接口)。
  • SqlSessionFactory:依靠工廠來生成 SqlSession(會話)。
  • SqlSession:一個既可以發送 SQL 去執行並返回結果,也可以獲取 Mapper 的接口。
  • SQL Mapper:它是 MyBatis 新設計的組件, 它是由一個 Java 接口和 XML 文件(或註解)構成的,需要給出對應的 SQL 和映射規則。它負責發送 SQL 語句,並返回結果。

 

生命週期

SqlSessionFactoryBuilder

SqlSessionFactoryBuilder 是利用 XML 或者 Java 編碼獲得資源來構建 SqlSessionFactory 的,通過它可以構建多個 SessionFactory。它的作用就是一個構建器,一旦我們構建了 SqlSessionFactory,它的作用就已經完結了,失去了存在的意義。所以它的生命週期只存在於方法的內部。

SqlSessionFactory

SqlSessionFactory 的作用是創建 SqlSession,而 SqlSession 就是一個會話,相當於 JDBC 中的 Connection 對象。每次應用程序訪問數據庫,我們都需要 SqlSessionFactory 創建 SqlSession,所以 SqlSessionFactory 應該在 MyBatis 應用的整個生命週期中。而如果我們多次創建同一個數據庫的 SqlSessionFactory,則每次創建 SqlSessionFactory 會打開更多的數據庫連接資源,那麼連接資源就很快會被耗盡。因此 SqlSessionFactory 的責任是唯一的,它的責任就是創建 SqlSession,所以應該採用單利模式。正確的做法是使得每一個數據庫只對應一個 SqlSessionFactory,管理好數據庫資源的分配,避免過多的 Connection 被消耗。

SqlSession

SqlSession 是一個會話,相當於 JDBC 的一個 Connection 對象,它的生命週期應該是在請求數據庫處理事務的過程中。它是一個線程不安全的對象,在涉及多線程的時候我們需要特別小心,操作數據庫需要注意其隔離級別,數據庫鎖等高級特效。此外,每次創建的 SqlSession 都必須及時關閉它,它的長期存在會使數據庫連接池的活動資源減少,對系統性能的影響太大。我們往往通過 finally 語句保證我們正確的關閉 SqlSession。它存活於一個應用的請求和操作,可以執行多條 SQL,保證事務的一致性。

Mapper

Mapper 是一個接口,而沒有具體的實現類,它的作用是發送 SQL,然後返回我們需要的結果,或者執行 SQL 從而修改數據庫的數據,因此它應該在一個 SqlSession 事務方法之內,是一個方法級別的東西。

用一張圖描述 MyBatis 組件的生命週期:

 

MyBatis 實用篇

MyBatis 概念

MyBatis 示例-簡介

MyBatis 示例-類型處理器

MyBatis 示例-傳遞多個參數

MyBatis 示例-主鍵回填

MyBatis 示例-動態 SQL

MyBatis 示例-聯合查詢

MyBatis 示例-緩存

MyBatis 示例-插件

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