大数跨境
0
0

再见MyBatis,这款ORM框架确实太优雅!!

再见MyBatis,这款ORM框架确实太优雅!! macrozheng
2025-07-24
0
导读:一个设计优雅、轻量且拥有卓越性能的 MyBatis 增强框架。

Boot+Cloud项目学习:macrozheng.com

在 Java 持久层框架的世界里,MyBatis 以其灵活性和对 SQL 的强大控制力,赢得了广大开发者的青睐。然而,在实际开发中,我们常常需要编写大量重复的 CRUD 代码,这促使了一系列 MyBatis 增强框架的诞生。今天,我们要介绍的主角是 MyBatis-Flex,一个设计优雅、轻量且拥有卓越性能的 MyBatis 增强框架。

MyBatis-Flex 旨在极大地提升开发效率和编码体验,让开发者能将更多精力投入到核心业务逻辑中。它通过内置的 QueryWrapper 实现了类型安全的查询构建,显著减少了手写 SQL 的工作量和出错的可能性。同时,它保持了对原生 MyBatis 功能的完全兼容,做到了“只增强,不限制”。

Mybatis-Flex 的有什么特点?

  1. 轻量: 除了 MyBatis,没有任何第三方依赖轻依赖、没有任何拦截器,其原理是通过 SqlProvider 的方式实现的轻实现。同时,在执行的过程中,没有任何的 Sql 解析(Parse)轻运行。
  2. 灵活: 支持多主键、多表查询、逻辑删除、乐观锁、数据脱敏、数据加密、多数据源、分库分表、字段权限、 字段加密、多租户、事务管理、SQL 审计... 等等等等。 这一切,免费且灵动。
  3. 高性能: 采用独特的技术架构、相比许多同类框架,MyBatis-Flex 的在增删改查等方面的性能均超越其 5~10 倍或以上。
  4. 只增强: 支持 CRUD、分页查询、多表查询、批量操作,但不丢失 MyBatis 原有的任何功能。

Mybatis-Flex 和同类框架对比

MyBatis-Flex 主要是和 MyBatis-Plus 与 Fluent-MyBatis 对比,内容来源其官网、git 或者 网络文章,若有错误欢迎纠正。

  • MyBatis-Plus:老牌的 MyBatis 增强框架,开源于 2016 年。
  • Fluent-MyBatis:阿里云开发的 MyBatis 增强框架(来自于阿里云·云效产品团队)

功能对比

功能或特点
MyBatis-Flex
MyBatis-Plus
Fluent-MyBatis
对 entity 的基本增删改查
分页查询
分页查询之总量缓存
分页查询无 SQL 解析设计(更轻量,及更高性能)
多表查询:from 多张表
多表查询:left join、inner join 等等
多表查询:union,union all
单主键配置
多种 id 生成策略
支持多主键、复合主键
字段的 typeHandler 配置
除了 MyBatis,无其他第三方依赖(更轻量)
QueryWrapper 是否支持在微服务项目下进行 RPC 传输
未知
逻辑删除
乐观锁
SQL 审计
数据填充
✔️ (收费)
数据脱敏
✔️ (收费)
字段权限
✔️ (收费)
字段加密
✔️ (收费)
字典回写
✔️ (收费)
Db + Row
Entity 监听
多数据源支持
借助其他框架或收费
多数据源是否支持 Spring 的事务管理,比如 @Transactional 和 TransactionTemplate 等
多数据源是否支持 "非 Spring" 项目
多租户
动态表名
动态 Schema

这或许是一个对你有用的开源项目,mall项目是一套基于 SpringBoot3 + Vue 的电商系统(Github标星60K),后端支持多模块和 2024最新微服务架构 ,采用Docker和K8S部署。包括前台商城项目和后台管理系统,能支持完整的订单流程!涵盖商品、订单、购物车、权限、优惠券、会员、支付等功能!

  • Boot项目:https://gitee.com/macrozheng/mall
  • Cloud项目:https://gitee.com/macrozheng/mall-swarm
  • 教程网站:https://www.macrozheng.com

项目演示:

性能对比

这里直接贴测试结果:

  • MyBatis-Flex 的查询单条数据的速度,大概是 MyBatis-Plus 的 5 ~ 10+ 倍。
  • MyBatis-Flex 的查询 10 条数据的速度,大概是 MyBatis-Plus 的 5~10 倍左右。
  • Mybatis-Flex 的分页查询速度,大概是 Mybatis-Plus 的 5~10 倍左右。
  • Mybatis-Flex 的数据更新速度,大概是 Mybatis-Plus 的 5~10+ 倍。

具体性能对比测试,移步:

https://mybatis-flex.com/zh/intro/benchmark.html

Mybatis-Flex 支持的数据库类型

MyBatis-Flex 支持的数据库类型,如下表格所示,我们还可以通过自定义方言的方式,持续添加更多的数据库支持。

数据库
描述
mysql
MySQL 数据库
mariadb
MariaDB 数据库
oracle
Oracle11g 及以下数据库
oracle12c
Oracle12c 及以上数据库
db2
DB2 数据库
hsql
HSQL 数据库
sqlite
SQLite 数据库
postgresql
PostgreSQL 数据库
sqlserver2005
SQLServer2005 数据库
sqlserver
SQLServer 数据库
dm
达梦数据库
xugu
虚谷数据库
kingbasees
人大金仓数据库
phoenix
Phoenix HBase 数据库
gauss
Gauss 数据库
clickhouse
ClickHouse 数据库
gbase
南大通用(华库)数据库
gbase-8s
南大通用数据库 GBase 8s
oscar
神通数据库
sybase
Sybase ASE 数据库
OceanBase
OceanBase 数据库
Firebird
Firebird 数据库
derby
Derby 数据库
highgo
瀚高数据库
cubrid
CUBRID 数据库
goldilocks
GOLDILOCKS 数据库
csiidb
CSIIDB 数据库
hana
SAP_HANA 数据库
impala
Impala 数据库
vertica
Vertica 数据库
xcloud
行云数据库
redshift
亚马逊 redshift 数据库
openGauss
华为 openGauss 数据库
TDengine
TDengine 数据库
informix
Informix 数据库
greenplum
Greenplum 数据库
uxdb
优炫数据库

快速开始

第 1 步:创建数据库表

CREATE TABLEIFNOTEXISTS`tb_account`
(
    `id`        INTEGER PRIMARY KEY auto_increment,
    `user_name`VARCHAR(100),
    `age`       INTEGER,
    `birthday`  DATETIME
);

INSERTINTO tb_account(id, user_name, age, birthday)
VALUES (1'张三'18'2020-01-11'),
       (2'李四'19'2021-03-21');

第 2 步:创建 Spring Boot 项目,并添加 Maven 依赖

TIP:可以使用 Spring Initializer 快速初始化一个 Spring Boot 工程。

需要添加的 Maven 主要依赖示例:

<dependencies>
    <dependency>
        <groupId>com.mybatis-flex</groupId>
        <artifactId>mybatis-flex-spring-boot-starter</artifactId>
        <version>1.5.3</version>
    </dependency>
    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP</artifactId>
    </dependency>
    <!-- for test only -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

第 3 步:对 Spring Boot 项目进行配置

在 application.yml 中配置数据源:

# DataSource Config
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/flex_test
    username: root
    password: 12345678

在 Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹:

@SpringBootApplication
@MapperScan("com.mybatisflex.test.mapper")
public class MybatisFlexTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(MybatisFlexTestApplication.classargs);
    }

}

第 4 步:编写实体类和 Mapper 接口

这里使用了 Lombok 来简化代码。

@Data
@Table("tb_account")
public class Account {

    @Id(keyType = KeyType.Auto)
    private Long id;
    private String userName;
    private Integer age;
    private Date birthday;

}
  • 使用 @Table("tb_account") 设置实体类与表名的映射关系
  • 使用 @Id(keyType = KeyType.Auto) 标识主键为自增

Mapper 接口继承 BaseMapper 接口:

public interface AccountMapper extends BaseMapper<Account{

}

这部分也可以使用 MyBatis-Flex 的代码生成器来生,功能非常强大的。详情进入:

https://mybatis-flex.com/zh/others/codegen.html

第 5 步:开始使用

添加测试类,进行功能测试:

import static com.mybatisflex.test.entity.table.AccountTableDef.ACCOUNT;

@SpringBootTest
class MybatisFlexTestApplicationTests {

    @Autowired
    private AccountMapper accountMapper;

    @Test
    void contextLoads() {
        QueryWrapper queryWrapper = QueryWrapper.create()
                .select()
                .where(ACCOUNT.AGE.eq(18));
        Account account = accountMapper.selectOneByQuery(queryWrapper);
        System.out.println(account);
    }

}

控制台输出:

Account(id=1, userName=张三, age=18, birthday=Sat Jan 11 00:00:00 CST 2020)

以上的 示例 中, ACCOUNT 为 MyBatis-Flex 通过 APT 自动生成,只需通过静态导入即可,无需手动编码。

总结

MyBatis-Flex 以其极致轻量、功能强大、无与伦比的高性能以及纯粹增强不限制的设计理念,为 MyBatis 生态注入了新的活力。它不仅提供了开发人员日常所需的大部分便捷功能,还免费开放了如多数据源、数据脱敏、字段加密等诸多企业级特性。

如果你正在寻找一个现代、高效且对开发者友好的 MyBatis 增强框架,或者对现有框架的性能、功能限制感到不満,可以尝试一下 MyBatis-Flex。

  • 官网文档: https://mybatis-flex.com/
  • GitHub: https://github.com/mybatis-flex/mybatis-flex

Github上标星60K的电商实战项目mall,全套 视频教程 已更新完毕!全套教程约40小时,共113期,通过这套教程你可以拥有一个涵盖主流Java技术栈的完整项目经验,同时提高自己独立开发一个项目的能力,下面是项目的整体架构图,感兴趣的小伙伴可以点击链接 mall视频教程 加入学习。

整套 视频教程 的内容还是非常完善的,涵盖了mall项目最佳学习路线、整体框架搭建、业务与技术实现全方位解析、线上Docker环境部署、微服务项目学习等内容,你也可以点击链接 mall视频教程 了解更多内容。

【声明】内容源于网络
0
0
macrozheng
内容 1937
粉丝 0
macrozheng
总阅读97
粉丝0
内容1.9k