原文链接: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-mybatis 2.x 介绍的更多相关文章

  1. MyBatis注解Annotation介绍及Demo

     MyBatis注解Annotation介绍及Demo 2014-04-21 17:09:55 标签:Mybatis Annotation 注解 ResultMap SqlBuilder 原创作品,允 ...

  2. 一、mybatis的插件介绍

    摘自:https://www.cnblogs.com/qm-article/p/11785350.html mybatis的插件机制   一.mybatis的插件介绍 关于mybatis的插件,我想大 ...

  3. Mybatis通用Mapper介绍和使用

    Mybatis通用Mapper介绍与使用 前言 使用Mybatis的开发者,大多数都会遇到一个问题,就是要写大量的SQL在xml文件中,除了特殊的业务逻辑SQL之外,还有大量结构类似的增删改查SQL. ...

  4. Mybatis拦截器介绍

    拦截器的一个作用就是我们可以拦截某些方法的调用,我们可以选择在这些被拦截的方法执行前后加上某些逻辑,也可以在执行这些被拦截的方法时执行自己的逻辑而不再执行被拦截的方法.Mybatis拦截器设计的一个初 ...

  5. Mybatis(一)入门介绍

    一.MyBatis的发展 MyBatis 是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到google code, 并且改名M ...

  6. 详解Mybatis通用Mapper介绍与使用

    使用Mybatis的开发者,大多数都会遇到一个问题,就是要写大量的SQL在xml文件中,除了特殊的业务逻辑SQL之外,还有大量结构类似的增删改查SQL.而且,当数据库表结构改动时,对应的所有SQL以及 ...

  7. MyBatis(1)优点&介绍&工程

    本次全部学习内容:MyBatisLearning 一:jabc的相关说明: jdbc编程步骤: 加载数据库驱动 创建并获取数据库链接 创建jdbc statement对象 设置sql语句 设置sql语 ...

  8. Mybatis拦截器介绍及分页插件

    1.1    目录 1.1 目录 1.2 前言 1.3 Interceptor接口 1.4 注册拦截器 1.5 Mybatis可拦截的方法 1.6 利用拦截器进行分页 1.2     前言 拦截器的一 ...

  9. jdbc、Mybatis、Hibernate介绍(非原创)

    文章大纲 一.jdbc介绍二.Mybatis介绍三.Hibernate介绍四.jdbc.Mybatis.Hibernate比较五.参考文章   一.jdbc介绍 1. jdbc编程步骤 (1)加载数据 ...

  10. MyBatis注解Annotation介绍及Demo(转)

    MyBatis可以利用SQL映射文件来配置,也可以利用Annotation来设置.MyBatis提供的一些基本注解如下表所示. 注解 目标 相应的XML 描述 @CacheNamespace 类 &l ...

随机推荐

  1. Java实现 LeetCode 670 最大交换(暴力)

    670. 最大交换 给定一个非负整数,你至多可以交换一次数字中的任意两位.返回你能得到的最大值. 示例 1 : 输入: 2736 输出: 7236 解释: 交换数字2和数字7. 示例 2 : 输入: ...

  2. Java实现 蓝桥杯VIP 算法训练 字符串逆序

    问题描述 给定一个字符串,将这个串的所有字母逆序后输出. 输入格式 输入包含一个字符串,长度不超过100,字符串中不含空格. 输出格式 输出包含一个字符串,为上面字符串的逆序. 样例输入 tsinse ...

  3. Java实现 LeetCode 131 分割回文串

    131. 分割回文串 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab" 输出: [ ["aa ...

  4. 实用!看Python如何光速合并多个PDF

    大家好,今天分享一个实用的办公脚本:将多个PDF合并为一个PDF, 例如我手上现在有如下3个PDF分册,需要整合成一个完整的PDF. 如果换成你操作的话,是不是打开百度搜索:PDF合并,然后去第三方网 ...

  5. (九)不安全的HTTP方法

    01 漏洞描述 <HTTP | HTTP报文>中介绍了HTTP的请求方法.在这些方法中,HTTP定义了一组被称为安全方法的方法:GET.HEAD.OPTIONS.TRACE,这些方法不会产 ...

  6. Centos 文件系统基础命令

    目录 centos7的目录结构(linux所以的都文件,万物接文件) 1 pwd 显示当前所在的路径 2 cd 切换目录结构 3 mkdir创建目录信息 4 touch 创建文件(触摸) 5 ls 检 ...

  7. sprintf 会自动追加’\0’至字符串末尾

    #define LEN_SERIAL_NUMBER (12) void C_CosemObjMeterInfo::SetSerialNum(U08 u08MeterId, U64 u64SerialN ...

  8. Cobbler自动化部署系统

    1.cobbler简介 ​ cobbler是一个LInux服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装.重装物理服务器和虚拟机,同时还可以管理DHCP,DNS等 ​ cobbler可以 ...

  9. 图解KMP以及next数组的求法

    在计算机科学中,Knuth-Morris-Pratt字符串查找算法(简称为KMP算法)可在一个主文本字符串S内查找一个模式串P的出现位置.此算法通过运用对这个模式串在不匹配时本身就包含足够的信息来确定 ...

  10. Mysql:bit类型的查询与插入

    原文链接:https://www.cnblogs.com/cuizhf/archive/2013/05/17/3083988.html Mysql关于bit类型的用法: 官方的资料如下: 9.1.5. ...