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

相关推荐
也无晴也无风雨30 分钟前
深入剖析输入URL按下回车,浏览器做了什么
前端·后端·计算机网络
2401_857610034 小时前
多维视角下的知识管理:Spring Boot应用
java·spring boot·后端
代码小鑫4 小时前
A027-基于Spring Boot的农事管理系统
java·开发语言·数据库·spring boot·后端·毕业设计
颜淡慕潇5 小时前
【K8S问题系列 | 9】如何监控集群CPU使用率并设置告警?
后端·云原生·容器·kubernetes·问题解决
CoderJia程序员甲5 小时前
重学SpringBoot3-整合 Elasticsearch 8.x (三)使用Repository
java·大数据·spring boot·elasticsearch
荆州克莱5 小时前
Mysql学习笔记(一):Mysql的架构
spring boot·spring·spring cloud·css3·技术
独泪了无痕6 小时前
WebStorm 如何调试 Vue 项目
后端·webstorm
怒放吧德德7 小时前
JUC从实战到源码:JMM总得认识一下吧
java·jvm·后端
代码小鑫7 小时前
A025-基于SpringBoot的售楼管理系统的设计与实现
java·开发语言·spring boot·后端·毕业设计
前端SkyRain7 小时前
后端SpringBoot学习项目-项目基础搭建
spring boot·后端·学习