ibit-mybatis 2.x 介紹

IBIT程式猿發表於2020-07-01

原文連結:ibit-mybatis 2.x 介紹

概述

ibit-mybatis 是一個 Mybatis 的增強工具,在 Mybatis 的基礎上增加了新的特性與功能,志在簡化開發流程、提高開發效率。

特性

  • 無侵入,引入ibit-mybatis對現有工程不會產生影響。
  • 無 xml 配置,基於註解的方式實現
  • 靈活的CRUD(增、刪、改、查)操作,Mapper,支援常用的單表CRUD操作,更有強大的SQL構造器(sql-builder),滿足更為複雜的操作(如聚合函式、分組、連表、分頁),為了讓sql-builder更好的支援 ibit-mybatis,從 ibit-mybatis 2.0 開始,sql-builder 合併到 ibit-mybatis 中。
  • 內建程式碼生成器(ibit-mybatis-generator),指定資料庫表,自動生成Mapper(無主鍵、單主鍵和多主鍵 Mapper)、Entity、Properties等基礎類,減少重複或者相似程式碼編寫。
  • 擴充套件支援,資料脫敏(後續支援)

sql-builder描述

sql-builder定義動態SQL的生成規則,用來實現單表的CRUD操作。

核心 sql 介面

詳細 api 文件參考:ibit-mybatis 2.x API 文件

說明 介面
搜尋 QuerySql
計數 CountSql
刪除 DeleteSql
插入 InsertSql
更新 UpdateSql

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 可直接建立 QuerySqlCountSqlDeleteSqlInsertSqlUpdateSql 對應例項。

Mapper 說明

Mapper 基礎支援

ibit-mybatis 定義了 4 種 Mapper,分別是 RawMapperNoIdMapperSingleIdMapperMultipleIdMapper。以下分別說明。

Mapper 型別 父介面 說明
RawMapper / 定義最原始的增、刪、改、查和 Sql 例項建立
NoIdMapper RawMapper 擴充套件無主鍵表的增
SingleIdMapper NoIdMapper 擴充套件單主鍵表的根據id增、刪、改、查
MultipleIdMapper NoIdMapper 擴充套件多主鍵表的根據id增、刪、改、查

使用 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

<dependency>
  <groupId>tech.ibit</groupId>
  <artifactId>ibit-mybatis</artifactId>
  <version>${latest}</version>
</dependency>

說明: 將 "${latest}" 替換成 2.0 以上版本。

配置說明

需要將 Mybatis Configuration 的 mapUnderscoreToCamelCase 的值設定為 true。

方式1:使用 mybatis-config.xml

<configuration>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>    

方式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轉換),其TypeHandlerCommonEnumTypeHandler

如果使用 CommonEnum 作為系統通用列舉類,則需要做以下改造。

a. 新的列舉需要實現CommonEnum#getValue方法。

b. SqlProvider 需要做配置

SqlProvider.setValueFormatter(new LinkedHashMap<Class, Function<Object, Object>>() {{
    put(tech.ibit.mybatis.CommonEnum.class, o -> ((tech.ibit.mybatis.CommonEnum) o).getValue());
}});

c. 修改預設的列舉 TypeHandler

方式1:使用 mybatis-config.xml

<configuration>
    <settings>
        <setting name="defaultEnumTypeHandler" value="tech.ibit.mybatis.CommonEnumTypeHandler"/>
    </settings>
</configuration>    

方式2:java 程式碼方式

Configuration configuration = new Configuration(environment);
configuration.setDefaultEnumTypeHandler(tech.ibit.mybatis.CommonEnumTypeHandler.class);

方式3:使用了 mybatis-spring-boot-starter,修改配置如下

# 指定預設的列舉處理類
mybatis.configuration.default-enum-type-handler=tech.ibit.mybatis.CommonEnumTypeHandler

相關專案專案

公眾號

喜歡我的文章,請關注公眾號

IBIT程式猿