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

相关推荐
wb043072015 小时前
使用 Java 开发 MCP 服务并发布到 Maven 中央仓库完整指南
java·开发语言·spring boot·ai·maven
nbwenren6 小时前
Springboot中SLF4J详解
java·spring boot·后端
helx827 小时前
SpringBoot中自定义Starter
java·spring boot·后端
rleS IONS7 小时前
SpringBoot获取bean的几种方式
java·spring boot·后端
lifewange8 小时前
Go语言-开源编程语言
开发语言·后端·golang
白毛大侠8 小时前
深入理解 Go:用户态和内核态
开发语言·后端·golang
R***z1019 小时前
Spring Boot 整合 MyBatis 与 PostgreSQL 实战指南
spring boot·postgresql·mybatis
王码码20359 小时前
Go语言中的数据库操作:从sqlx到ORM
后端·golang·go·接口
星辰_mya9 小时前
雪花算法和时区的关系
数据库·后端·面试·架构师
赵丙双10 小时前
spring boot AutoConfiguration.replacements 文件的作用
java·spring boot