mybatis系列之初識mybatis

說在前面的話

今天開始,準備把 mybatis 的知識梳理一遍,為什麼梳理 mybatis 呢?因為 mybatis 的源碼最簡單啊(說什麼大實話)。no~no~no~,是因為現在的這些框架都和 springboot 整合在一起了,用起來是方便了,但是其中的原理就越不瞭解了。所以整理幾篇 mybatis 的文章分享給大家,配合代碼案例,希望大家有所收穫。另外因為這是第一篇,所以代碼量相對來說比較多,希望大家耐下看下去,畢竟也是下了一番功夫的,絕對是原創,如有雷同,肯定是他們抄襲的。

好了,話不多說,我們直接進入正題。

1 mybatis為我們做了哪些事情

  1. 使用連接池對連接進行管理 :連接池,這個不多說。
  2. SQL 和代碼分離,集中管理 :主要是 mapper.xml 文件,專門用來配置sql語句。
  3. 重複 SQL 的提取 :比如標籤。
  4. 參數映射和動態 SQL :比如 等。
  5. 結果集映射 :查詢結果後會映射成對象。
  6. 緩存管理 :一級緩存和二級緩存。
  7. 插件機制:分頁插件等。


2 準備工作(小demo,配合講解)

先整體說下需要有哪些東西:

  • pom.xml 引入 mybatis 引入 jar 包。
  • mybatis-config.xml 配置文件。
  • mapper 接口和 mapper.xml 文件。
  • 測試類。

2.1 pom.xml 文件 ,因為不和 spring/springBoot 集成,所以引入的 jar 包比較少。

      org.mybatis      mybatis      3.5.1              mysql      mysql-connector-java      8.0.16    

2.2 mybatis-config.xml文件(重點) ,db.properties 為數據庫的配置信息,不單獨貼出來。

                                             

2.3 mapper接口和 mapper.xml,Fruit為水果 pojo 類,只有id和name兩個屬性,不單獨貼出來

public interface FruitMapper {    Fruit findById(Long id);}
    id,name     

2.4 測試方法(重點)

public class MybatisTest {    @Test    public void testSelect() throws IOException {        String resource = "mybatis-config.xml";        InputStream inputStream = Resources.getResourceAsStream(resource);        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        SqlSession session = sqlSessionFactory.openSession();        try {            FruitMapper mapper = session.getMapper(FruitMapper.class);            Fruit fruit = mapper.findById(1L);            System.out.println(fruit);        } finally {            session.close();        }    }} 

2.5 執行測試方法的結果

Created connection 2014838114.Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7817fd62]==>  Preparing: select id,name from fruit where id =? ==> Parameters: 1(Long)<==    Columns: id, name<==        Row: 1, 蘋果<==      Total: 1Fruit(id=1, name=蘋果)

簡單的 demo 就做好了,大家有興趣的話可以跟著做一下。下面才是本次的重點類容。

3 配置文件標籤作用

這裡只說下mybatis-config.xml裡面現在用到的標籤,後面用到了其他標籤時會說明。然後在最後一篇 mybatias 文章時,會把所有的標籤都整理出來,並且重要的會有例子說明,還會有自定義標籤裡面的類容的例子。

  • configuration:這個是配置的最頂層標籤
  • properties:用來配置數據庫連接的信息
  • settings:全局配置標籤,這裡只配置了打印sql日誌
  • typeAliases :類型別名,用來設置一些別名來代替 Java 的長類型聲明(如 java.lang.int 變為 int),減少配置編碼的冗餘
  • mappers:映射器配置,配置mapper.xml文件
  • environments:環境配置,主要用來配置數據源和事物

4 核心對象

最後講下測試類,裡面的代碼就是單獨使用 MyBatis 的全部流程。後面講源碼也是基於這個來講。首先說下里面的4個核心對象:

  • SqlSessionFactory 全局唯一的,一旦被創建之後,在應用的運行期間一直存在。
  • SqlSessionFactoryBuilder 這個就是用來構建 SqlSessionFactory ,一旦構建好後面就用不到。實際上就是解析 mapper.xml 和 mybatis-config.xml 裡面的標籤的屬性值設置到 Configuration這個類對應的屬性上。
  • SqlSession :是一次會話,它不是線程安全的,不能在線程間共享。所以我們在請求開始的時候創建一個 SqlSession 對象,在請求結束或者說方法執行完畢的時候要及時關閉它。
  • Mapper :是從 SqlSession 中獲取的(實際上是一個代理對象)。 它的作用是發送 SQL 來操作數據庫。

然後用個類比的方法,模擬一個場景來幫助大家理解一下這幾個核心對象的作用。場景是這樣的:比如說一個建築公司(SqlSessionFactory)需要修一個房子,首先是不是有設計圖紙(mapper.xml)和修房子需要用到的材料清單( mybatis-config.xml),然後採購部門(SqlSessionFactoryBuilder)根據材料清單去採購材料放到倉庫(Configuration)中。然後是工人師傅(SqlSession)根據設計圖紙(mapper.xml)和倉庫裡面的材料( mybatis-config.xml)去造房子(數據庫)。

這樣是不是要好理解一點。啊,都被自己的聰明給折服了(自戀中)。

5 主要的執行流程

mybatis系列之初識mybatis

主要流程就這些,裡面的細節後面會講。這幅圖的流程就不做講解了,可以看下上面的類比例子。

6 總結

回顧一下這節的類容:

  1. 一個簡單的demo。
  2. mybatis-config.xml裡面一級標籤的作用說明。
  3. 幾個核心對象的作用。
  4. 一個圖片說明了一下執行的流程。

這期 mybatis 的類容到這裡就結束了,覺得講的還可以的,記得點個贊哦!我們下期再見。


分享到:


相關文章: