ibit-mybatis 2.x 介紹
阿新 • • 發佈:2020-07-02
原文連結:[ibit-mybatis 2.x 介紹](https://ibit.tech/archives/ibit-mybatis-2x)
## 概述
`ibit-mybatis` 是一個 Mybatis 的增強工具,在 Mybatis 的基礎上增加了新的特性與功能,志在簡化開發流程、提高開發效率。
### 特性
* 無侵入,引入`ibit-mybatis`對現有工程不會產生影響。
* 無 xml 配置,基於註解的方式實現
* 靈活的CRUD(增、刪、改、查)操作,Mapper,支援常用的單表CRUD操作,更有強大的SQL構造器([sql-builder](https://github.com/ibit-tech/sql-builder)),滿足更為複雜的操作(如聚合函式、分組、連表、分頁),為了讓sql-builder更好的支援 ibit-mybatis,從 ibit-mybatis 2.0 開始,sql-builder 合併到 ibit-mybatis 中。
* 內建程式碼生成器([ibit-mybatis-generator](https://github.com/ibit-tech/ibit-mybatis-generator)),指定資料庫表,自動生成Mapper(無主鍵、單主鍵和多主鍵 Mapper)、Entity、Properties等基礎類,減少重複或者相似程式碼編寫。
* 擴充套件支援,資料脫敏(後續支援)
### sql-builder描述
`sql-builder`定義動態SQL的生成規則,用來實現單表的CRUD操作。
#### 核心 sql 介面
詳細 api 文件參考:[ibit-mybatis 2.x API 文件](https://ibit.tech/apidocs/ibit-mybatis/2.x/index.html)
| 說明 | 介面 |
| --- | --- |
| 搜尋 | [QuerySql](https://ibit.tech/apidocs/ibit-mybatis/2.x/index.html) |
| 計數 | [CountSql](https://ibit.tech/apidocs/ibit-mybatis/2.x/index.html) |
| 刪除 | [DeleteSql](https://ibit.tech/apidocs/ibit-mybatis/2.x/index.html) |
| 插入 | [InsertSql](https://ibit.tech/apidocs/ibit-mybatis/2.x/index.html) |
| 更新 | [UpdateSql](https://ibit.tech/apidocs/ibit-mybatis/2.x/index.html) |
#### sql 介面支援
不同型別的 sql, 其語句的約束不一樣,下表列舉所有的語句支援。
| 介面 | 支援方法 | 說明 |
| --- | --- | --- |
| ColumnSupport | column
columnPo | `SELECT column1[, column2...]` 語句| | DeleteSupport | delete | `DELETE t1.*` 語句| | DistinctSupport | distinct | `DISTINCT` 語句 | | FromSupport | from | `FROM table1 t1[, table2 t2...]` 語句| | GroupBySupport | groupBy | `GROUP BY t1.column1[, t2.column2, ...]`語句| | HavingSupport | having
andHaving
orHaving | `HAVING`語句| | InsertTableSupport | insert | `INSERT INTO table1 t1` 語句, t1表示 "表別名" | | JoinOnSupport | joinOn
leftJoinOn
rightJoinOn
fullJoinOn
innerJoinOn
complexLeftJoinOn
complexRightJoinOn
complexFullJoinOn
complexInnerJoinOn | `[LEFT\|RIGHT\|FULL\|INNER] JOIN ON`語句 | | LimitSupport | limit | `LIMIT #{start}, #{limit}`語句 | | OrderBySupport | orderBy | `ORDER BY` 語句 | | SetSupport | set | SET 條件語句 | | UpdateTableSupport | update | `UPDATE table1 t1[, table2 t2...]`語句,t1,t2表示"表別名" | | ValuesSupport | values | `(column1, column2, ...) VALUES(?, ?, ...)`語句 | | WhereSupport | where
andWhere
orWhere | `WHERE` 語句 | #### sql 工廠類 工廠類:`tech.ibit.mybatis.sqlbuilder.SqlFactory`,一般不直接使用,繼承 `RawMapper` 的 Mapper 可直接建立 `QuerySql`、`CountSql`、`DeleteSql`、`InsertSql` 和 `UpdateSql` 對應例項。 ### Mapper 說明 #### Mapper 基礎支援 `ibit-mybatis` 定義了 4 種 Mapper,分別是 `RawMapper`,`NoIdMapper`,`SingleIdMapper`,`MultipleIdMapper`。以下分別說明。 | Mapper 型別 | 父介面 | 說明 | | --- | --- | --- | | RawMapper | / | 定義最原始的增、刪、改、查和 Sql 例項建立 | | NoIdMapper | RawMapper | 擴充套件無主鍵表的增 | | SingleIdMapper | NoIdMapper | 擴充套件單主鍵表的根據id增、刪、改、查 | | MultipleIdMapper | NoIdMapper | 擴充套件多主鍵表的根據id增、刪、改、查 | 使用 [ibit-mybatis-generator](https://github.com/ibit-tech/ibit-mybatis-generator) 2.x 版本,會根據表主鍵數量,繼承不同的 Mapper。 #### Mapper 結合 Sql 自定義增、刪、改、查 | Mapper 建立 Sql 例項方法 | 例項型別 | 例項執行方法說明 | | --- | --- | --- | | createQuery | QuerySql | executeQueryPage:查詢(包含分頁資訊)
executeQuery:查詢列表
executeQueryOne:查詢單條
executeQueryDefaultPage:查詢基本型別(包含分頁資訊)
executeQueryDefault:查詢基本型別| | createCount | CountSql | executeCount:計數 | | createDelete | DeleteSql | executeDelete:執行刪除 | | createInsert | InsertSql | executeInsert:執行插入
executeInsertWithGenerateKeys:執行插入並生成主鍵 | | createUpdate | UpdateSql | executeUpdate:執行更新| 自定義查詢例子: ``` public User getByUsername(String username) { if (StringUtils.isBlank(username)) { return null; } return mapper .createQuery() .columnPo(User.class) .from(UserProperties.TABLE) .andWhere(UserProperties.username.eq(username)) .limit(1) .executeQueryOne(); } ``` ## 用法 ### 相關引用 #### Gradle ``` compile 'tech.ibit:ibit-mybatis:${lastest}' ``` #### Maven ``` ``` **說明**: 將 "${latest}" 替換成 `2.0` 以上版本。 ### 配置說明 需要將 Mybatis Configuration 的 `mapUnderscoreToCamelCase` 的值設定為 true。 **方式1**:使用 mybatis-config.xml ``` ``` **方式2**:java 程式碼方式 ``` Configuration configuration = new Configuration(environment); configuration.setMapUnderscoreToCamelCase(true); ``` **方式3**:使用了 `mybatis-spring-boot-starter`,修改配置如下 ``` # 欄位對映駝峰 mybatis.configuration.map-underscore-to-camel-case=true ``` ### 其他說明 `ibit-mybatis` 定義了列舉型別(`CommonEnum`,列舉-Integer轉換),其`TypeHandler`為 `CommonEnumTypeHandler`。 如果使用 `CommonEnum` 作為系統通用列舉類,則需要做以下改造。 **a.** 新的列舉需要實現`CommonEnum#getValue`方法。 **b.** SqlProvider 需要做配置 ``` SqlProvider.setValueFormatter(new Linke
columnPo | `SELECT column1[, column2...]` 語句| | DeleteSupport | delete | `DELETE t1.*` 語句| | DistinctSupport | distinct | `DISTINCT` 語句 | | FromSupport | from | `FROM table1 t1[, table2 t2...]` 語句| | GroupBySupport | groupBy | `GROUP BY t1.column1[, t2.column2, ...]`語句| | HavingSupport | having
andHaving
orHaving | `HAVING`語句| | InsertTableSupport | insert | `INSERT INTO table1 t1` 語句, t1表示 "表別名" | | JoinOnSupport | joinOn
leftJoinOn
rightJoinOn
fullJoinOn
innerJoinOn
complexLeftJoinOn
complexRightJoinOn
complexFullJoinOn
complexInnerJoinOn | `[LEFT\|RIGHT\|FULL\|INNER] JOIN ON`語句 | | LimitSupport | limit | `LIMIT #{start}, #{limit}`語句 | | OrderBySupport | orderBy | `ORDER BY` 語句 | | SetSupport | set | SET 條件語句 | | UpdateTableSupport | update | `UPDATE table1 t1[, table2 t2...]`語句,t1,t2表示"表別名" | | ValuesSupport | values | `(column1, column2, ...) VALUES(?, ?, ...)`語句 | | WhereSupport | where
andWhere
orWhere | `WHERE` 語句 | #### sql 工廠類 工廠類:`tech.ibit.mybatis.sqlbuilder.SqlFactory`,一般不直接使用,繼承 `RawMapper` 的 Mapper 可直接建立 `QuerySql`、`CountSql`、`DeleteSql`、`InsertSql` 和 `UpdateSql` 對應例項。 ### Mapper 說明 #### Mapper 基礎支援 `ibit-mybatis` 定義了 4 種 Mapper,分別是 `RawMapper`,`NoIdMapper`,`SingleIdMapper`,`MultipleIdMapper`。以下分別說明。 | Mapper 型別 | 父介面 | 說明 | | --- | --- | --- | | RawMapper | / | 定義最原始的增、刪、改、查和 Sql 例項建立 | | NoIdMapper | RawMapper | 擴充套件無主鍵表的增 | | SingleIdMapper | NoIdMapper | 擴充套件單主鍵表的根據id增、刪、改、查 | | MultipleIdMapper | NoIdMapper | 擴充套件多主鍵表的根據id增、刪、改、查 | 使用 [ibit-mybatis-generator](https://github.com/ibit-tech/ibit-mybatis-generator) 2.x 版本,會根據表主鍵數量,繼承不同的 Mapper。 #### Mapper 結合 Sql 自定義增、刪、改、查 | Mapper 建立 Sql 例項方法 | 例項型別 | 例項執行方法說明 | | --- | --- | --- | | createQuery | QuerySql | executeQueryPage:查詢(包含分頁資訊)
executeQuery:查詢列表
executeQueryOne:查詢單條
executeQueryDefaultPage:查詢基本型別(包含分頁資訊)
executeQueryDefault:查詢基本型別| | createCount | CountSql | executeCount:計數 | | createDelete | DeleteSql | executeDelete:執行刪除 | | createInsert | InsertSql | executeInsert:執行插入
executeInsertWithGenerateKeys:執行插入並生成主鍵 | | createUpdate | UpdateSql | executeUpdate:執行更新| 自定義查詢例子: ``` public User getByUsername(String username) { if (StringUtils.isBlank(username)) { return null; } return mapper .createQuery() .columnPo(User.class) .from(UserProperties.TABLE) .andWhere(UserProperties.username.eq(username)) .limit(1) .executeQueryOne(); } ``` ## 用法 ### 相關引用 #### Gradle ``` compile 'tech.ibit:ibit-mybatis:${lastest}' ``` #### Maven ``` ``` **說明**: 將 "${latest}" 替換成 `2.0` 以上版本。 ### 配置說明 需要將 Mybatis Configuration 的 `mapUnderscoreToCamelCase` 的值設定為 true。 **方式1**:使用 mybatis-config.xml ``` ``` **方式2**:java 程式碼方式 ``` Configuration configuration = new Configuration(environment); configuration.setMapUnderscoreToCamelCase(true); ``` **方式3**:使用了 `mybatis-spring-boot-starter`,修改配置如下 ``` # 欄位對映駝峰 mybatis.configuration.map-underscore-to-camel-case=true ``` ### 其他說明 `ibit-mybatis` 定義了列舉型別(`CommonEnum`,列舉-Integer轉換),其`TypeHandler`為 `CommonEnumTypeHandler`。 如果使用 `CommonEnum` 作為系統通用列舉類,則需要做以下改造。 **a.** 新的列舉需要實現`CommonEnum#getValue`方法。 **b.** SqlProvider 需要做配置 ``` SqlProvider.setValueFormatter(new Linke