百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

竟然才发现,这款比MyBatis还好用的ORM框架,确实太优雅啦

ccwgpt 2025-07-27 19:07 1 浏览 0 评论

大家好,相信程序员最最常用的数据库就是MySQL,那么最常用的ORM框架想必就是MyBatis和MyBatis-Plus。但是,我最近发现了一款更新的技术,接下来我来介绍这款最新的技术!

在 Java 持久层框架领域,MyBatis 凭借其对 SQL 的直接掌控与出色的灵活性,始终占据着重要地位并深受广大开发者信赖;然而在实际开发实践中,大量重复性的基础 CRUD(增删改查)代码编写往往成为效率瓶颈,催生了旨在简化开发流程的各类 MyBatis 增强框架应运而生——今天我们将聚焦于 MyBatis-Flex:这是一款设计理念优雅、保持轻量化特质(无第三方依赖)、并在性能表现上具备显著优势的现代化 MyBatis 增强框架,致力于通过智能化代码生成、友好的 API 设计极对复杂 SQL 的简洁表达能力,为开发者提供更高效、更愉悦的数据访问层开发体验。

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 的 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数据库

oracle

oracle11g及以下数据库

db2

DB2数据库

hsql

HSQL数据库

sqlite

SQLite数据库

postgresql

PostgreSQL数据库

sqlserver

SQLServer数据库

dm

达梦数据库

快速开始

第一步:创建库表

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, '张张', 25, '2000-01-11'),
     						 (2, '李李', 24, '2001-03-21');

第二步:创建SpringBoot项目,并且添加依赖

<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>

第三步:在SpringBoot项目中配置数据库

# application.yml DataSource Config
spring:
  	datasource:
    		url: jdbc:mysql://localhost:3306/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.class, args);
    		}
}

第五步:编写实体类和Mapper

@Data
@Table("tb_account")
public class Account {
   		 		@Id(keyType = KeyType.Auto)  // 这里直接用自增id
    			private Long id;
    			private String userName;
    			private Integer age;
    			private Date birthday;
}

Mapper 接口要继承 BaseMapper 接口:

public interface AccountMapper extends BaseMapper<Account> {

}

第六步:开始使用

直接进行功能测试

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=25, birthday=Sat Jan 11 00:00:00 CST

快速总结

MyBatis-Flex 凭借其极致轻量化设计、强大功能集合、卓越性能表现与遵循纯粹“增强不限制”原则的设计理念,深度激活了 MyBatis 生态的生命力;它不仅提供了开发者日常所需的大量便捷功能,更免费供给了多数据源、数据脱敏、字段加密等诸多企业级特性;感兴趣的伙伴以尝试 MyBatis-Flex(但在升级现有老项目时需谨慎评估)。

相关推荐

Spring框架基础知识-第四节内容(Spring基础配置)

Spring基础配置Spring框架本身有四大原则:(1)使用POJO进行轻量级和最小侵入式开发。(2)通过依赖注入和基于接口编程实现松耦合。(3)通过AOP和默认习惯进行声明式编程。(4)使...

SpringBoot项目开发实战销售管理系统——项目框架搭建!

项目框架搭建在完成项目的分析和数据库设计后,一般由架构师完成项目框架的搭建,包括项目依赖的添加、项目的配置和项目日志的配置,完成后再开始业务代码的编写。技术栈的搭建新建一个SpringBoot项目,...

从零到一:独立运行若依框架系统并进行本地二次开发

####一、环境准备1.**基础环境**:-JDK1.8+(推荐JDK17)-Maven3.6+-MySQL5.7+(推荐8.0)-Redis5.0+-Node.js16...

单片机时间片轮询程序架构(单片机如何实现精准的时间周期)

时间片轮询法有很多时候都是与操作系统一起被提到,也就是说很多时候是操作系统中使用了这一方法:STM32单片机开发中的RTOS。下文将参考别人的代码,演示建立的一个时间片轮询架构程序的...

Netty主要组件和服务器启动源码分析

1.Netty服务端启动代码publicclassNettyServer{publicstaticvoidmain(String[]args)throwsInterrup...

前端定时任务的神库!快把它加到你的项目中去!

我们常会遇到定时刷新数据、轮询接口、发送提醒等场景,我们常会遇到定时刷新数据、轮询接口、发送提醒等场景。为什么选择cron库?定时任务开发痛点原生setInterval的时间误差累积难以实现复杂的...

如何正确实现一个后台(定时)任务(后台定时任务怎么实现)

相信大家都知道如何在.NET中执行后台(定时)任务。首先我们会选择实现IHostedService接口或者继承BackgroundService来实现后台任务。然后注册到容器内,然后注册到容...

秒杀传统的Linux Crontab,这款开源的定时任务管理系统绝了!

Gocron是一款开源的定时任务管理系统,基于Go语言开发,旨在替代传统的LinuxCrontab。它通过Web界面提供直观的任务管理功能,支持精确到秒的Crontab时间表达式,并具备任务重试、超...

Python 定时任务:schedule 自动执行脚本太方便。

2025年了,还在为Python定时任务头疼?轻量级需求搞什么Celery,schedule三行代码就搞定。这库把定时任务简化到像说人话,但新手直接抄文档容易踩坑。文档只会告诉你怎么设置每10分钟执行...

SpringBoot扩展——定时任务!(基于springboot的校园宿舍管理系统的设计与实现)

定时任务项目开发中会涉及很多需要定时执行的代码,如每日凌晨对前一日的数据进行汇总,或者系统缓存的清理、对每日的数据进行分析和总结等需求,这些都是定时任务。单体系统和分布式系统的分布式任务有很大的区别,...

适合普通开发者和产品经理的PHP应用模板开发AI的SaaS应用框架

简单到傻!Liang_SaaS适合普通开发者和产品经理的PHP应用模板开发AI的SaaS应用框架,利用Php开发AI的SaaS应用框架,是一个强大的内容管理仪表板模板,基于Bootstrap和...

非常实用的15款开源PHP类库(php开源管理系统)

PHP库给开发者提供了一个标准接口,它帮助开发者在PHP里充分利用面向对象编程。这些库为特定类型的内置功能提供了一个标准的API,允许类可以与PHP引擎进行无缝的交互。此外,开发者使用这些类库还可以简...

蜂神榜苹果商店也凑热闹:“520”我爱玩家!

各位看官,今天被朋友圈各类“520”刷屏呢?有没有给你亲爱的家人一份“520”模式的红包呢?苹果商店也给了玩家一个“520”模式的惊喜---再一次提供了多款“1元”价格的游戏!并且此次降价的游戏品质都...

变成气球的猫咪《气球》十一正式推出

墨西哥游戏公司NoodlecakeGames曾开发过《致命框架》、《阿尔托冒险》等优秀佳作,而它旗下的最新游戏《气球》(TheBalloons)在十一的时候就要和大家见面了。游戏中,玩家要操控娃娃...

星座超游爱:狮子遇挑战,处女手抓牢~

teemo跟大家讲了三期太阳星座,也许有很多不热心的小伙伴并不知道是什么东西,今天就小科普一番~在出生的那一天,太阳所落的那个星座,就是每个人的太阳星座,而这恰好就是大家的性格中心,是权势驱力、人格的...

取消回复欢迎 发表评论: