ibit-mybatis介绍

iBit程序猿 2019年12月16日 1,283次浏览

概述

   ibit-mybatis是一个Mybatis的增强工具,在Mybatis的基础上增加了新的特性与功能,志在简化开发流程、提高开发效率。

特性

  • 无侵入,引入”ibit-mybatis”对现有工程不会产生影响。
  • 灵活的CRUD(增、删、改、查)操作,内置Dao,Mapper,支持常用的单表CRUD操作,更有强大的SQL构造器(sql-builder),满足更为复杂的操作(如聚合函数、分组、连表)。
  • 内置代码生成器(ibit-mybatis-generator),指定数据库表,自动生成Dao、Mapper、Entity、Properties等基础类,减少重复或者相似代码编写。
  • 扩展支持,分页、数据脱敏
  • 主流微服务框架springboot(ibit-mybatis-springboot-starter)的支持

整体框架图

framework

sql-builder描述

sql-builder定义动态SQL的生成规则,用来实现单表的CRUD操作。

模块图

module

动态SQL构造规则

序号方法描述
1select
selectPo(对象)
selectDistinct
selectDistinctPo(对象)
select [distinct]语句
2count
countDistinct
select count [distinct]语句
3deleteFrom
deleteTableFrom(别名)
delete from语句
4updateupdate语句
5insertInto
batchInsertInto(批量)
insert into语句
6set
increaseSet(列自增)
decreaseSet(列自减)
set语句
7valuesvalues语句
8fromfrom语句
9joinOn
leftJoinOn
rightJoinOn
fullJoinOn
innerJoinOn
complexLeftJoinOn
complexRightJoinOn
complexFullJoinOn
complexInnerJoinOn
[left\|right\|full\|inner] join on语句
10where
andWhere
orWhere
where语句
11groupBygroup by语句
12having
andHaving
orHaving
having语句
13orderByorder by语句
14limitlimit语句

更加详细用法参考sql-builder

核心代码说明

ibit-mybatis重新定义了业务分层模型,将原有的Dao层下放到Mapper(数据访问层),增加新的Dao层(构造层)。

分层模型

level

定义Mapper

Mapper为数据访问层,默认基于注解实现了insert(增加),update(更新/删除),select(查询),count(计数)和实体映射到xml的ResultMap。接收参数为sql-builder生成的SqlParams参数。Mapper对于原生的基于xml、注解的数据访问方式是兼容的。

定义Dao

Dao为构造层,可以通过sql-builder构造sql,调用Mapper获取结果。定义通用的Dao模板,默认支持跟主键相关的CRUD操作。

Dao模板设计,按照主键个数分类,分成3类,无主键、单个主键、多个主键。

  • NoIdDao:无主键Dao,只支持插入操作。
  • SingleIdDao:单个主键Dao,支持插入,通过主键查询、更新删除操作。
  • MultipleIdDao:多个主键Dao,支持插入,通过主键查询、更新删除操作。

dao

用法

相关引用

Gradle

compile 'tech.ibit:ibit-mybatis:${lastest}'

Maven

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

说明: 将 "$" 替换成对应的版本

其他说明

如果需要需要在Mapper中动态指定"resultMap",则需要增加拦截器tech.ibit.mybatis.plugin.ResultMapInterceptor

@Bean
public ResultMapInterceptor getResultMapInterceptor() {
    return new ResultMapInterceptor();
}