Springboot mybatis-flex 操作实践

桃花潭水深千尺,不及汪伦送我情。

1 前言

在日常的项目开发中,经常会用到 ORM 框架,mybatis 是大家耳熟能详的优秀代表,但是其也存在着诸多的不足。后端开发者已经不能满足于自动生成 CRUD 工具了,于是基于此有了 mybatis 的增强版本,mybatis-plus 以及 mybatis-flex, 在本文中将介绍 mybatis-flex 这个后起之秀。

2 mybatis-flex 介绍

mybatis-flex 是一款轻量、灵活、高性能的 MyBatis 增强框架,可以通过编码的方式实现数据的操作和查询,而不是在 xml 中编写 sql。其提供了灵活的 QueryWrapper,可以实现关联查询和多表查询等操作。由于其独特的架构,没有采用 mybatis 的任何拦截器,使得 sql 执行性能非常高,通常的数据场景下,mybatis-flex 的性能是mybatis-plus5-10倍

ruby 复制代码
# mybatis-flex 文档地址
https://mybatis-flex.com/zh/intro/getting-started.html

此外,mybatis-flex 采用了 APT 技术,使得在编程式书写 sql 时可以简洁的实现,并且可以实现数据的关联查询,数据分析类型的查询,还可以使用 as 的方式来避免查询后的数据转换。

mybatis-flex 引入 springboot 项目中所需要的依赖如下所示:

xml 复制代码
<dependency>
   <groupId>com.mybatis-flex</groupId>
   <artifactId>mybatis-flex-spring-boot-starter</artifactId>
   <version>1.7.3</version>
</dependency>
# 使用 apt 技术生成时,需要加入此依赖,但是需要去除 codegen 才能生成 Table 信息
<dependency>
   <groupId>com.mybatis-flex</groupId>
   <artifactId>mybatis-flex-processor</artifactId>
   <version>1.7.3</version>
   <scope>provided</scope>
</dependency>

# 代码生成
<dependency>
   <groupId>com.mybatis-flex</groupId>
   <artifactId>mybatis-flex-codegen</artifactId>
   <version>1.7.3</version>
</dependency>

mybatis-flex 的通常配置如下,基本上和 mybatis以及 mybatis-plus 类似,两者都是做了增强的功能,其它的一些配置都是使用默认的约定方式,简化了开发者的搭建和尝试难度。

3 主要 api

mybatis-flex 的增删改查的基础 api 都封装在了 baseMapper 中,这一点和 mybatis-plusbaseMapper 类似。接下来会讲述各种 api 的操作以及相应的特点。

3.1 数据增删改

数据的新增可以全部字段新增,也可以选择非null 字段新增,此外还可以选择是否忽略 null 值,是否自定义主键保存数据,批量插入数据等内容。

数据的更新可以根据主键更新,根据条件更新,以及选择是否忽略 null 值,数据的存储和更新 insertOrUpdate 也可以综合运用。

数据的删除可以指定 id 单条或者批量删除,也可以根据条件进行操作。

3.2 数据查询

数据的查询操作相对来说比较多,不仅有简单的单条、批量查询和分页查询,还有复杂的关联查询以及统计类型的查询。在数据查询时,可以结合 QueryWrapper 使用 APT 技术,可以使用编码的方式实现 sql 的查询。

4 mybatis-flex 实践

在开始之前,我们需要先介绍一下两个实体类,需要通过注解的方式设置数据库表名,以及主键的模式。@Column 是字段映射的注解,该注解有 ignore 的属性,可以忽略该字段在数据库的存在。对于时间类型的数据而言, onInsertValue 和 onUpdateValue 具有实用价值,可以保证在分布式服务中,数据的更新和创建都使用数据库时间。@ColumnMask 注解实现了数据的脱敏处理,常用的个人信息中,都会有脱敏的配置。 在实体类中也有租户和分布式锁的注解,这里就不进行展示了。

如下图所示,数据的保存以及更新都是在 service 中已经实现了对应的方法,保存和修改的方法比较通用。在构建查询条件时使用的是 QueryWrapper ,通过它可以构建各种复杂的查询条件,如果查询条件为空时,会自动忽略其查询条件,如下图所示。 在查询时,通常返回结果不会只是实体类对象,所以在查询时需要构建返回参数,可以使用带 as 的查询方法来获取对应的返回值。

对于复杂的统计查询,如下图所示,通过上述的分析可以知道 mybatis-flex 基本上可以实现所有复杂的查询,在 xml 中 sql 已经不是必要的了。

5 Db+Row

除了前述的内容外,mybatis-flex还提供了 Db + Row 的方式提供数据的增删改查,如下所示可以完成数据的操作, 通过以上的方式可以像使用工具类一样来操作数据库,简单方便。

6 总结

mybatis-flex 只是基于 mybatis 做了增强实现, 如果需要完整的 orm 功能,还是需要使用 mybatismybaits-plus , 此外对于复杂的数据统计、查询通过编码的方式实现会显得代码臃肿,不如在 xml 中解决显得清晰。不论是何种 orm 工具,都需要考虑实际情况,对于简单的操作可以工具增强来实现,复杂的还是通过 sql 来解决。本文中所涉及的代码已经上传至 github, 欢迎大家点赞关注。项目 github 地址 springboot-auth

相关推荐
bcbnb2 分钟前
详细教程:iOS应用中Swift代码混淆步骤与工具推荐
后端
气π3 分钟前
【JavaWeb】——(若依 + AI)-基础学习笔记
java·spring boot·笔记·学习·java-ee·mybatis·ruoyi
expect7g3 分钟前
Paimon源码解读 -- Compaction-8.专用压缩任务
大数据·后端·flink
开心就好20257 分钟前
H5 混合应用加密 Web 资源暴露到 IPA 层防护的完整技术方案
后端
bcbnb12 分钟前
最新版本iOS系统设备管理功能全面指南
后端
开心就好202515 分钟前
Fastlane + Appuploader 的工程组合,自动化发布中的分工
后端
YDS82922 分钟前
SpringCould —— 网关详解
后端·spring·spring cloud
华仔啊23 分钟前
如何避免MySQL死锁?资深DBA的9条黄金法则
后端·mysql
老华带你飞41 分钟前
列车售票|基于springboot 列车售票系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习·spring
青韵1 小时前
Claude 高级工具使用解析:从上下文优化到程序化调用的工程实践
后端