使用fluent mybatis也可以不用写具体的 xml 文件,通过 java api 可以构造出比较复杂的业务 sql 语句,做到代码逻辑和 sql 逻辑的合一。不再需要在 Dao 中组装查询或更新操作,或在 xml 与 mapper 中再组装参数。那对比原生 Mybatis,Mybatis Plus 或者其他框架,FluentMybatis提供了哪些便利呢?
需求场景设置
我们通过一个比较典型的业务需求来具体实现和对比下,假如有学生成绩表结构如下:
现在有需求:
「统计 2000 年三门学科('英语', '数学', '语文')及格分数按学期,学科统计最低分,最高分和平均分, 且样本数需要大于 1 条,统计结果按学期和学科排序」
我们可以写 SQL 语句如下
那上面的需求,分别用fluent mybatis, 原生mybatis和Mybatis plus来实现一番。
三者实现对比
使用fluent mybatis 来实现上面的功能
需要本文具体演示代码可加我微信:codedq,免费获取!
我们可以看到fluent api的能力,以及 IDE 对代码的渲染效果。
换成mybatis原生实现效果
定义Mapper接口
定义接口需要用到的参数实体 SummaryQuery
定义实现业务逻辑的mapper xml文件
实现业务接口(这里是测试类,实际应用中应该对应 Dao 类)
总之,直接使用 mybatis,实现步骤还是相当的繁琐,效率太低。那换成mybatis plus的效果怎样呢?
换成mybatis plus实现效果
mybatis plus的实现比mybatis会简单比较多,实现效果如下
如红框圈出的,写mybatis plus实现用到了比较多字符串的硬编码(可以用 Entity 的 get lambda 方法部分代替字符串编码)。字符串的硬编码,会给开发同学造成不小的使用门槛,个人觉得主要有 2 点:
字段名称的记忆和敲码困难
Entity 属性跟随数据库字段发生变更后的运行时错误
其他框架,比如TkMybatis在封装和易用性上比mybatis plus要弱,就不再比较了。
生成代码编码比较
fluent mybatis生成代码设置
mybatis plus代码生成设置
FluentMybatis特性一览
三者对比总结
看完 3 个框架对同一个功能点的实现, 各位看官肯定会有自己的判断,笔者这里也总结了一份比较。
对 Fluent Mybatis 感兴趣的网友,支持大家去阅读官方源码,发现更多新大陆!