Appearance
| 功能或特点 | dream-orm | mybatis-flex | mybatis-plus |
|---|---|---|---|
| 跨平台 | 完美支持,支持tdengine,clickhouse等特殊数据库,且仅写一种SQL语法 | 支持,但特例情况,手写SQL不支持 | 支持,但特例情况,手写SQL不支持 |
| 第三方依赖 | 无第三方依赖,完美可控,性能天花板 | 依赖mybatis,性能高 | 依赖mybatis等,性能偏低 |
| 对 entity 的基本增删改查 | 支持,无需继承父类接口,可细分列表页,编辑页等视图,更充分的利用字段 | 支持,基于继承父类接口实现,查询字段可能存在多余查询且前端未使用情况 | 支持,基于继承父类接口实现,查询字段可能存在多余查询且前端未使用情况 |
| 对 entity数据校验 | 支持采用注解方式,实现自定义校验逻辑,可完成与数据库有关的校验 | 不支持自动校验 | 不支持自动校验 |
| 分页查询 | 完美支持,基于抽象树分页,一次分页,永久改变,性能不下降,而且将分页语句改写成最优 | 支持,基于方言分页,但手写SQL不支持分页 | 支持,基于方言分页 |
| 链式查询 | 支持,基于编译注解处理器实现,且链式顺序和标准SQL写法保持一致 | 支持,基于编译注解处理器实现,顺序可能会错乱,如where链式可以写from链式 | 支持,基于lambda实现,阅读相对较差 |
| 链式多表查询 | 支持 | 支持 | 不支持 |
| 一对一或一对多简单查询(简单配置) | 支持 | 支持 | 本身不支持,但继承mybatis特性支持,手写SQL实现,且不支持跨平台,属于一对一复杂查询 |
| 一对一或一对多复杂查询(手写sql) | 支持 | 本身不支持,但继承mybatis特性支持,且不支持跨平台 | 本身不支持,但继承mybatis特性支持,且不支持跨平台 |
| 单主键配置 | 支持 | 支持 | 支持 |
| 多种 id 生成策略 | 支持 | 支持 | 支持 |
| 支持多主键、复合主键 | 支持 | 支持 | 不支持 |
| 字段的 typeHandler 配置 | 支持 | 支持 | 支持 |
| 逻辑删除 | 完美支持 | 支持,但对手写SQL无能为力 | 支持,但对手写SQL无能为力 |
| 乐观锁 | 完美支持,基于抽象树完成,从设计角度,完全解耦 | 支持,但对手写SQL无能为力,从设计角度,耦合度高 | 支持,但对手写SQL无能为力 |
| SQL 审计 | 支持,基于监听器实现,且可以完成字段变更记录,完全解耦 | 支持,耦合度高 | 支持,可基于拦截器实现,完全解耦,但性能相对较差 |
| 数据填充 | 支持 | 支持 | 支持 |
| 数据脱敏 | 支持 | 支持 | 支持但收费 |
| 字段权限 | 支持 | 支持 | 支持但收费 |
| 字段加密 | 支持 | 支持 | 支持但收费 |
| 字典回写 | 支持 | 支持 | 支持但收费 |
| 多数据源支持 | 支持 | 支持 | 支持 |
| 多租户 | 完美支持,基于抽象树完成,从设计角度,完全解耦 | 支持,但对手写SQL无能为力,从设计角度,耦合度高 | 支持,基于拦截器实现,耦合度低,且需借助jsqlparser额外支持,存在SQL解析错误情况,且难以修复 |
| 动态表名 | 支持 | 支持,但手写SQL不自动支持 | 支持,但手写SQL不自动支持 |
| 缓存 | 高级,缓存是基于表进行隔离的,非查询只会清空与之操作有关的表,且可以动态指定那些表可以支持缓存 | 简单 | 简单 |
