mybatis詳細解讀以及mybatis plus的使用

mybatis簡介

任何一門語言的最好學習的途徑無非是它的官網:

http://www.mybatis.org/mybatis-3/zh/index.html

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

JDBC與Mybatis的關係

JDBC需要先註冊驅動和數據庫信息、操作Connection、通過statement對象執行SQL,將結果返回給resultSet,然後從resultSet中讀取數據並轉換爲pojo對象,最後需要關閉數據庫相關資源。而且還需要自己對JDBC過程的異常進行捕捉和處理。

MyBatis對JDBC的封裝很好,幾乎可以取代Jdbc。

MyBatis使用SqlSessionFactoryBuilder來連接完成JDBC需要代碼完成的數據庫獲取和連接,減少了代碼的重複。JDBC將SQL語句寫到代碼裏,屬於硬編碼,非常不易維護,MyBatis可以將SQL代碼寫入xml中,易於修改和維護。JDBC的resultSet需要用戶自己去讀取並生成對應的POJO,MyBatis的mapper會自動將執行後的結果映射到對應的Java對象中。

mybatis重要組件

  • Configuration

MyBatis所有的配置信息都維持在Configuration對象之中。

  • SqlSession

作爲MyBatis工作的主要頂層API,表示和數據庫交互的會話,完成必要數據庫增刪改查功能

  • Executor

MyBatis執行器,是MyBatis 調度的核心,負責SQL語句的生成和查詢緩存的維護

  • StatementHandler

封裝了JDBC Statement操作,負責對JDBC statement 的操作,如設置參數、將Statement結果集轉換成List集合。

  • ParameterHandler

負責對用戶傳遞的參數轉換成JDBC Statement 所需要的參數,

  • ResultSetHandler

負責將JDBC返回的ResultSet結果集對象轉換成List類型的集合;

  • TypeHandler

 負責java數據類型和jdbc數據類型之間的映射和轉換

  • MappedStatement

 MappedStatement維護了一條<select|update|delete|insert>節點的封裝,

  • SqlSource

負責根據用戶傳遞的parameterObject,動態地生成SQL語句,將信息封裝到BoundSql對象中,並返回

  • BoundSql

表示動態生成的SQL語句以及相應的參數信息

Mybatis底層原理和結構

mybatis是如何獲取數據庫中的字段

原理

information_schema數據庫是MySQL自帶的,它提供了訪問數據庫元數據的方式。什麼是元數據呢?元數據是關於數據的數據,如數據庫名或表名,列的數據類型,或訪問權限等。有些時候用於表述該信息的其他術語包括“數據詞典”和“系統目錄”。

在MySQL中,把 information_schema 看作是一個數據庫,確切說是信息數據庫。其中保存着關於MySQL服務器所維護的所有其他數據庫的信息。如數據庫名,數據庫的表,表欄的數據類型與訪問權 限等。在INFORMATION_SCHEMA中,有數個只讀表。它們實際上是視圖,而不是基本表,因此,你將無法看到與之相關的任何文件。

 

 

information_schema表說明

SCHEMATA表:提供了當前mysql實例中所有數據庫的信息。是show databases的結果取之此表。

TABLES表:提供了關於數據庫中的表的信息(包括視圖)。詳細表述了某個表屬於哪個schema,表類型,表引擎,創建時間等信息。是show tables from schemaname的結果取之此表。

COLUMNS表:提供了表中的列信息。詳細表述了某張表的所有列以及每個列的信息。是show columns from schemaname.tablename的結果取之此表。

STATISTICS表:提供了關於表索引的信息。是show index from schemaname.tablename的結果取之此表。

USER_PRIVILEGES(用戶權限)表:給出了關於全程權限的信息。該信息源自mysql.user授權表。是非標準表。

SCHEMA_PRIVILEGES(方案權限)表:給出了關於方案(數據庫)權限的信息。該信息來自mysql.db授權表。是非標準表。

TABLE_PRIVILEGES(表權限)表:給出了關於表權限的信息。該信息源自mysql.tables_priv授權表。是非標準表。

COLUMN_PRIVILEGES(列權限)表:給出了關於列權限的信息。該信息源自mysql.columns_priv授權表。是非標準表。

CHARACTER_SETS(字符集)表:提供了mysql實例可用字符集的信息。是SHOW CHARACTER SET結果集取之此表。

COLLATIONS表:提供了關於各字符集的對照信息。

COLLATION_CHARACTER_SET_APPLICABILITY表:指明瞭可用於校對的字符集。這些列等效於SHOW COLLATION的前兩個顯示字段。

TABLE_CONSTRAINTS表:描述了存在約束的表。以及表的約束類型。

KEY_COLUMN_USAGE表:描述了具有約束的鍵列。

ROUTINES表:提供了關於存儲子程序(存儲程序和函數)的信息。此時,ROUTINES表不包含自定義函數(UDF)。名爲“mysql.proc name”的列指明瞭對應於INFORMATION_SCHEMA.ROUTINES表的mysql.proc表列。

VIEWS表:給出了關於數據庫中的視圖的信息。需要有show views權限,否則無法查看視圖信息。

TRIGGERS表:提供了關於觸發程序的信息。必須有super權限才能查看該表

 

 

查找當前數據庫的表信息:

第一種方法:

select * from information_schema.TABLES where TABLE_SCHEMA=(select database())

第二種方法:

#獲取表信息

show table status

 

查找當前表的所有字段信息:

第一種方法:

select * from information_schema.COLUMNS where TABLE_SCHEMA = (select database()) and TABLE_NAME=#{tableName}

 

第二種方法:

show full fields from `student`;

集成spring的多數據源處理

1、通過掃描包區分

git demo: https://gitee.com/lv-success/git-second/tree/master/course-3-mybatis/springBootMybatisMulidatasource

 

2、通過動態數據源區分

一般使用註解的形式,這裏先留着,後面的renren-fast項目

mybatis的讀寫分離

原理:

和多數據源處理差不多,mybatis做讀寫分離也有多種方法。通過攔截髮起請求的方法或執行的sql來自動判斷需要的數據源!

 

1、攔截髮起操作的方法名

需要自己約定增刪改查的前綴,然後根據前綴選擇數據源!

git demo:https://gitee.com/lv-success/git-second/tree/master/course-3-mybatis/bounterMybatis

 

2、攔截髮起操作的sql

git demo:https://github.com/shawntime/shawn-rwdb

 

mybatis源碼分析

關於mabatis的我覺得寫的比較好的博文,推薦給大家:

 

  • 大閒人柴毛毛

MyBatis源碼解析(一)——MyBatis初始化過程解析

MyBatis源碼解析(二)——動態代理實現函數調用

 

  • zhjh256

mybatis 3.x源碼深度解析與最佳實踐

 

  • 南軻夢

隨筆分類 - mybatis

mybatis plus的簡單運用

文章:https://www.java-mindmap.com/view/21

官網:https://mp.baomidou.com/guide

官網實例:https://gitee.com/baomidou/mybatis-plus-samples

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