原文連結: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 可直接建立 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 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轉換),其TypeHandler
為 CommonEnumTypeHandler
。
如果使用 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-mybatis-generator
- web啟動專案:ibit-springboot-web-starter
- web腳手架:ibit-springboot-web-starter-archetype
公眾號
喜歡我的文章,請關注公眾號