ibit-mybatis 2.x 介绍
原文链接: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
公众号
喜欢我的文章,请关注公众号

ibit-mybatis 2.x 介绍的更多相关文章
- MyBatis注解Annotation介绍及Demo
MyBatis注解Annotation介绍及Demo 2014-04-21 17:09:55 标签:Mybatis Annotation 注解 ResultMap SqlBuilder 原创作品,允 ...
- 一、mybatis的插件介绍
摘自:https://www.cnblogs.com/qm-article/p/11785350.html mybatis的插件机制 一.mybatis的插件介绍 关于mybatis的插件,我想大 ...
- Mybatis通用Mapper介绍和使用
Mybatis通用Mapper介绍与使用 前言 使用Mybatis的开发者,大多数都会遇到一个问题,就是要写大量的SQL在xml文件中,除了特殊的业务逻辑SQL之外,还有大量结构类似的增删改查SQL. ...
- Mybatis拦截器介绍
拦截器的一个作用就是我们可以拦截某些方法的调用,我们可以选择在这些被拦截的方法执行前后加上某些逻辑,也可以在执行这些被拦截的方法时执行自己的逻辑而不再执行被拦截的方法.Mybatis拦截器设计的一个初 ...
- Mybatis(一)入门介绍
一.MyBatis的发展 MyBatis 是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到google code, 并且改名M ...
- 详解Mybatis通用Mapper介绍与使用
使用Mybatis的开发者,大多数都会遇到一个问题,就是要写大量的SQL在xml文件中,除了特殊的业务逻辑SQL之外,还有大量结构类似的增删改查SQL.而且,当数据库表结构改动时,对应的所有SQL以及 ...
- MyBatis(1)优点&介绍&工程
本次全部学习内容:MyBatisLearning 一:jabc的相关说明: jdbc编程步骤: 加载数据库驱动 创建并获取数据库链接 创建jdbc statement对象 设置sql语句 设置sql语 ...
- Mybatis拦截器介绍及分页插件
1.1 目录 1.1 目录 1.2 前言 1.3 Interceptor接口 1.4 注册拦截器 1.5 Mybatis可拦截的方法 1.6 利用拦截器进行分页 1.2 前言 拦截器的一 ...
- jdbc、Mybatis、Hibernate介绍(非原创)
文章大纲 一.jdbc介绍二.Mybatis介绍三.Hibernate介绍四.jdbc.Mybatis.Hibernate比较五.参考文章 一.jdbc介绍 1. jdbc编程步骤 (1)加载数据 ...
- MyBatis注解Annotation介绍及Demo(转)
MyBatis可以利用SQL映射文件来配置,也可以利用Annotation来设置.MyBatis提供的一些基本注解如下表所示. 注解 目标 相应的XML 描述 @CacheNamespace 类 &l ...
随机推荐
- Java实现 LeetCode 215. 数组中的第K个最大元素
215. 数组中的第K个最大元素 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6 ...
- Java实现 LeetCode 109 有序链表转换二叉搜索树
109. 有序链表转换二叉搜索树 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. ...
- Java培训Day01——制作疫情地图(一)
一.前言 此次培训,是为期三天的网上培训.最终的目的是制作出疫情地图.首先我们来看看主要的讲课内容大纲. Day1 |-Java语法学习(个人感觉讲得还可以,主要围绕本次培训作出的讲解,没有像网上的基 ...
- 河青的持久层框架hqbatis
谈到对数据库的操作,powerbuilder 的嵌入式SQL还是最方便的,增.删.改.查都无比的方便,可惜它落败于BS架构的盛起.java 以mvc的框架,实现对数据库的操作,写起来是相当麻烦,jav ...
- 实验四 Linux系统C语言开发环境学习
项目 内容 这个作业属于哪个课程 Linux系统与应用 这个作业的要求在哪里 作业要求链接 学号-姓名 17041428-朱槐健 作业学习目标 1.Linux系统下C语言开发环境搭建 2.学习Linu ...
- Ubuntu16.04安装完成后首先更换源地址,加速下载
也可以,sudo pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple临时改变源地址下载先备份源文件sudo cp sources ...
- count(1) AND count(*) 对比
相信很多小伙伴都想知道count(1) 和 count(*) 的速度问题 ,今天我给大家做一下测试.我这里测试的是MySql数据库 声明:测试之前 我数据库表里面有100万条数据.我们先来测试coun ...
- netty集群(一)-服务注册发现
上篇文章介绍了如何搭建一个单机版本的netty聊天室:https://www.jianshu.com/p/f786c70eeccc. 一.需要解决什么问题: 当连接数超过单机的极限时,需要将netty ...
- Flutter 中由 BuildContext 引发的血案
今天和各位分享一个博主在实际开发中遇到的问题,以及解决方法.废话不多说,我们先来看需求: 我们要做一个iOS风格的底部菜单弹出组件,具体涉及showCupertinoModalPopup()方法,该方 ...
- Python基础——爬虫以及简单的数据分析
目标:使用Python编写爬虫,获取链家青岛站的房产信息,然后对爬取的房产信息进行分析. 环境:win10+python3.8+pycharm Python库: import requests imp ...