与 Mybatis-plus 对比,Mybatis-Flex v1.0.7 发布
Mybatis-Flex 是一个优雅的 Mybatis 增强框架,它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库,其内置的 QueryWrapper 帮助我们极大的减少了 SQL 编写的工作的同时,减少出错的可能性。
总而言之,Mybatis-Flex 能够极大地提高我们的开发效率和开发体验,让我们有更多的时间专注于自己的事情。
MyBatis-Flex 1.0.7 更新内容如下:
- 新增:BaseMapper 添加可以直接根据 Condition 查询的方法,更加方便
- 新增:Db 添加可以直接根据 Condition 查询的方法,更加方便
- 新增:代码生成器添加 @Table(onSet) 的配置
- 新增:添加 HttpMessageReporter,用于可以往服务器发送审计日志
- 优化:APT 生成的 java 属性默认使用下划线的方式
- 优化:优化 APT 生成 mapper 的默认存放路径
- 优化:重命名 QueryEntityProcesser 为 QueryEntityProcessor
- 文档:添加字段权限的相关文档
- 文档:添加字典回写的相关文档
- 文档:添加字段加密的相关文档
- 文档:添加 Mybatis-Flex 与同类框架对比的文档
Mybaits-Plus 是一个老牌的、享有盛誉的 Mybatis 增强框架,flex 和 plus 有什么区别呢?以下是 Mybatis-Flex、Mybatis-Plus、Fluent-Mybatis 的一些细节对比。容来源其官网、git 或者 网络文章,若有错误欢迎指正。
功能对比
- MyBatis-Plus:老牌的 MyBatis 增强框架
- Fluent-Mybatis:阿里开发的 Mybatis 增强框架(是阿里开发的吗?)
功能或特点 | MyBatis-Flex | MyBatis-Plus | Fluent-Mybatis |
---|---|---|---|
对 entity 的基本增删改查 | ✅ | ✅ | ✅ |
分页查询 | ✅ | ✅ | ✅ |
分页查询之总量缓存 | ✅ | ❌ | ❌ |
分页查询无SQL解析设计(更轻量) | ✅ | ❌ | ✅ |
多表查询: from 多张表 | ✅ | ❌ | ❌ |
多表查询: left join、inner join 等等 | ✅ | ❌ | ✅ |
单主键配置 | ✅ | ✅ | ✅ |
多种 id 生成策略 | ✅ | ✅ | ✅ |
支持多主键、复合主键 | ✅ | ❌ | ❌ |
字段的 typeHandler 配置 | ✅ | ✅ | ✅ |
除了 Mybatis,无其他第三方依赖(更轻量) | ✅ | ❌ | ❌ |
逻辑删除 | ✅ | ✅ | ✅ |
乐观锁 | ✅ | ✅ | ✅ |
SQL 审计 | ✅ | ❌ | ❌ |
数据填充 | ✅ | ✅(收费) | ✅ |
数据脱敏 | ✅ | ✅(收费) | ❌ |
字段权限 | ✅ | ✅(收费) | ❌ |
字段加密 | ✅ | ✅(收费) | ❌ |
字典回显 | ✅ | ✅(收费) | ❌ |
Db + Row | ✅ | ❌ | ❌ |
Entity 监听 | ✅ | ❌ | ❌ |
多数据源支持 | ✅ | ✅ | ❌ |
以上内容来自第三方相关产品的官方文档或第三方平台,若有错误,欢迎指正。
基础查询
MyBatis-Flex:
QueryCondition condition = EMPLOYEE.LAST_NAME.like("B") .and(EMPLOYEE.GENDER.eq(1)) .and(EMPLOYEE.AGE.gt(24)); List<Employee> employees = employeeMapper.selectListByCondition(condition);
MyBatis-Plus:
QueryWrapper<Employee> queryWrapper = new QueryWrapper<>(); queryWrapper .like("last_name","B") .eq("gender",1) .gt("age",24); List<Employee> employees = employeeMapper.selectList(queryWrapper);
Fluent-MyBatis:
EmployeeQuery query = new EmployeeQuery() .where.lastName().like("B") .and.gender().eq(1) .and.age().gt(24) .end(); List<Employee> employees = employeeMapper.listEntity(query);
总结:MyBatis-Flex 和 Fluent-MyBatis 的字段有 IDE 自动提示,不担心写错,同时在后续版本升级和重构时,更好的利用 IDE 的重构功能, 字段错误在项目编译期间就能发现及时纠正。
查询集合函数
MyBatis-Flex:
QueryWrapper query = new QueryWrapper() .select( ACCOUNT.ID, ACCOUNT.USER_NAME, max(ACCOUNT.BIRTHDAY), avg(ACCOUNT.SEX).as("sex_avg") ); List<Employee> employees = employeeMapper.selectListByQuery(query);
MyBatis-Plus:
QueryWrapper<Employee> queryWrapper = new QueryWrapper<>(); queryWrapper .select( "id" ,"user_name" ,"max(birthday)" ,"avg(birthday) as sex_avg" ); List<Employee> employees = employeeMapper.selectList(queryWrapper);
缺点:字段硬编码,容易错处。无法使用 ide 的字段进行重构,无法使用 IDE 自动提示,发生错误不能及时发现。
Fluent-MyBatis:
EmployeeQuery query = new EmployeeQuery() .select .id() .userName() .max.birthday() .avg.sex("sex_avg") .end() List<Employee> employees = employeeMapper.listEntity(query);
缺点:编写内容不符合 sql 直觉。
and(...) 和 or(...)
假设我们要构建如下的 SQL 进行查询(需要在 SQL 中添加括号)。
SELECT * FROM tb_account WHERE id >= 100 AND (sex = 1 OR sex = 2) OR (age IN (18,19,20) AND user_name LIKE "%michael%" )
MyBatis-Flex:
QueryWrapper query = QueryWrapper.create() .where(ACCOUNT.ID.ge(100)) .and(ACCOUNT.SEX.eq(1).or(ACCOUNT.SEX.eq(2))) .or(ACCOUNT.AGE.in(18,19,20).and(ACCOUNT.USER_NAME.like("michael")));
MyBatis-Plus:
QueryWrapper<Employee> query = new QueryWrapper<>(); queryWrapper.ge("id",100) .and(i->i.eq("sex",1).or(x->x.eq("sex",2))) .or(i->i.in("age",{18,19,20}).like("user_name","michael"));
Fluent-Mybatis:
AccountQuery query = new AccountQuery() .where.id().ge(100) .and( new AccountQuery().where.sex().eq(1).or( new AccountQuery().where.sex().eq(2).end() ).end()) .or( new AccountQuery().where.age.in(18,19,20) .and.userName().like("michael").end() ) .end();
缺点:许多
.end()
方法调用,容易忘记出错(或者是我写错了?欢迎指正)。
多表查询 1
MyBatis-Flex:
QueryWrapper query = QueryWrapper.create() .select().from(ACCOUNT) .leftJoin(ARTICLE).on(ACCOUNT.ID.eq(ARTICLE.ACCOUNT_ID)) .where(ACCOUNT.AGE.ge(10)); List<Account> accounts = mapper.selectListByQuery(query);
MyBatis-Plus:
// 不支持~~~~
Fluent-MyBatis:
StudentQuery leftQuery = new StudentQuery("a1").selectAll() .where.age().eq(34) .end(); HomeAddressQuery rightQuery = new HomeAddressQuery("a2") .where.address().like("address") .end(); IQuery query = leftQuery .join(rightQuery) .on(l -> l.where.homeAddressId(), r -> r.where.id()).endJoin() .build(); List<StudentEntity> entities = this.mapper.listEntity(query);
缺点:编写内容不符合 sql 直觉。同时在编写
end()
和endJoin()
容易忘记。
多表查询 2
假设查询的 SQL 如下:
SELECT a.id, a.user_name, b.id AS articleId, b.title FROM tb_account AS a, tb_article AS b WHERE a.id = b.account_id
MyBatis-Flex:
QueryWrapper query = new QueryWrapper() .select( ACCOUNT.ID , ACCOUNT.USER_NAME , ARTICLE.ID.as("articleId") , ARTICLE.TITLE) .from(ACCOUNT.as("a"), ARTICLE.as("b")) .where(ACCOUNT.ID.eq(ARTICLE.ACCOUNT_ID));
MyBatis-Plus:
// 不支持~~~~
Fluent-MyBatis:
// 不支持~~~~
PS:也有可能是我自己不知道如何支持,而 Fluent-MyBatis 原因,有知道的同学可以给下示例代码。
进一步了解 MyBatis-Flex 框架,请参考一下链接:
- 1、快速开始:https://mybatis-flex.com/zh/getting-started.html
- 2、强大的 QueryWrapper:https://mybatis-flex.com/zh/querywrapper.html
- 3、逻辑删除:https://mybatis-flex.com/zh/logic_delete.html
- 4、乐观锁:https://mybatis-flex.com/zh/version.html
- 5、数据填充:https://mybatis-flex.com/zh/fill.html
- 6、数据脱敏:https://mybatis-flex.com/zh/mask.html
- 7、SQL 审计:https://mybatis-flex.com/zh/audit.html
- 8、多数据源:https://mybatis-flex.com/zh/multi-datasource.html
- 9、更多企业级的功能正在路上:https://mybatis-flex.com

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
API 鉴权插件来了!支持用户自定义鉴权
本版本更新亮点: 分组独立的 UI,支持分组 API 鉴权 API 测试支持继承 API 鉴权 支持用户自定义鉴权插件,仅需部分配置即可发布鉴权插件 开始介绍功能之前, 我想先和大家分享一下鉴权功能设计的一些思考。 其实和大部分接口测试前要登录类似,鉴权是身份验证的一种方式。在大多数情况下,鉴权信息一般是: 对大多数 API 生效而不是仅某几个 API 需要鉴权 测试使用不需要显示在文档信息中,一般会有个说明文件全局说明此项目下的 API 使用什么鉴权 以下三种设计都可以满足在测试前自动鉴权的需求: 鉴权信息配置在分组/项目中,内部的 API 从父级继承鉴权信息 每个 API 配置独立的鉴权 在环境中配置鉴权信息,选中后 API 引用环境信息鉴权 我们如何判断要将这个功能放在哪里呢? 我们先来分析分组和环境的使用范围: 分组:对一系列 API 生效,适合放置鉴权/登录等一系列 API 都可能用到的前置条件,也可以设置公共的断言(例如状态码等于 200) 环境:灵活的全局变量用法,和 API 没有强关联关系,可以根据按不同用户创建(例如 Scar 本地环境/Jack 本地环境)...
- 下一篇
Xmake v2.7.8 发布,改进包虚拟环境和构建速度
Xmake是一个基于 Lua 的轻量级跨平台构建工具。 它非常的轻量,没有任何依赖,因为它内置了 Lua 运行时。 它使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。 我们能够使用它像 Make/Ninja 那样可以直接编译项目,也可以像 CMake/Meson 那样生成工程文件,另外它还有内置的包管理系统来帮助用户解决 C/C++ 依赖库的集成使用问题。 目前,Xmake 主要用于 C/C++ 项目的构建,但是同时也支持其他 native 语言的构建,可以实现跟 C/C++ 进行混合编译,同时编译速度也是非常的快,可以跟 Ninja 持平。 Xmake = Build backend + Project Generator + Package Manager + [Remote|Distributed] Build + Cache 尽管不是很准确,但我们还是可以把 Xmake 按下面的方式来理解: Xmake ≈ Make/...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Red5直播服务器,属于Java语言的直播服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7