当前位置: 首页 > article >正文

MyBatis-Flex 全面指南:下一代轻量级持久层框架实战入门

🚀 MyBatis-Flex 全面指南:下一代轻量级持久层框架实战入门

本文将带你全面了解 MyBatis-Flex 的特性、常见用法、最佳实践,帮助你高效构建更简洁、更灵活的 Java 持久层代码。


🧩 什么是 MyBatis-Flex?

MyBatis-Flex 是在经典 ORM 框架 MyBatis 基础上进行封装优化的新一代持久层框架,具备如下特点:

  • 🌈 轻量灵活:保留 MyBatis 的灵活性,同时简化配置和编码。
  • 🏗 实体驱动建表:内置强大的代码生成器,支持数据库反向生成。
  • 🔎 类型安全查询 DSL:无需写 XML,可用 Java 代码拼接 SQL。
  • 💡 极简配置:零 XML 配置,开箱即用。
  • 💼 增强的 CRUD 支持:简化 insert、update、select、delete 操作。

📦 快速开始

1. 引入依赖(Maven)

<dependency><groupId>com.mybatisflex</groupId><artifactId>mybatis-flex-spring-boot-starter</artifactId><version>1.7.6</version>
</dependency>

2. 配置 application.yml

spring:datasource:url: jdbc:mysql://localhost:3306/demo?useSSL=falseusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Drivermybatis-flex:mapper-locations: classpath*:/mapper/**/*.xml

3. 编写实体类

@Table(value = "user")
public class User {@Idprivate Long id;private String name;private Integer age;private String email;// Getter/Setter 省略
}

✅ 注解 @Table 指定数据库表名,@Id 标识主键。

4. 创建 Mapper 接口

public interface UserMapper extends BaseMapper<User> {// 无需手动实现,继承 BaseMapper 自动注入通用 CRUD 方法
}

5. 使用 Service 调用

@Service
public class UserService {@Resourceprivate UserMapper userMapper;public List<User> findAll() {return userMapper.selectAll();}
}

🔍 核心功能详解

✅ 通用 CRUD 操作

// 插入
User user = new User();
user.setName("张三");
user.setAge(20);
userMapper.insert(user);// 更新
user.setAge(25);
userMapper.update(user);// 查询
User user = userMapper.selectOneById(1L);// 删除
userMapper.deleteById(1L);

🧾 条件构造器 + DSL 查询

// 条件查询:select * from user where age > 18 and name like '%张%'
QueryWrapper wrapper = QueryWrapper.create().where(UserTableDef.USER.AGE.gt(18)).and(UserTableDef.USER.NAME.like("张"));List<User> users = userMapper.selectListByQuery(wrapper);

UserTableDef.USER 是自动生成的字段定义类,可通过代码生成器自动生成。


🏗 分页查询

Page<User> page = userMapper.paginate(new Page<>(1, 10), QueryWrapper.create().where(UserTableDef.USER.AGE.ge(18)));System.out.println("总页数:" + page.getTotalPage());
System.out.println("总记录数:" + page.getTotalRow());

🧠 代码生成器

MyBatis-Flex 提供了内置代码生成器,支持从数据库反向生成实体类、Mapper 接口、XML 等。

public class CodeGen {public static void main(String[] args) {GlobalConfig config = new GlobalConfig();config.setAuthor("YourName");config.setOutputDir("src/main/java");// 数据源配置DataSourceConfig dsConfig = new DataSourceConfig();dsConfig.setUrl("jdbc:mysql://localhost:3306/demo");dsConfig.setUsername("root");dsConfig.setPassword("root");// 执行生成Generator generator = new Generator(dsConfig, config);generator.generate();}
}

📚 实战案例:复杂查询组合

QueryWrapper wrapper = QueryWrapper.create().select(UserTableDef.USER.ALL).from(UserTableDef.USER).where(UserTableDef.USER.AGE.between(20, 30)).and(UserTableDef.USER.NAME.like("李%")).orderBy(UserTableDef.USER.AGE.desc());List<User> users = userMapper.selectListByQuery(wrapper);

🔄 多表关联查询

QueryWrapper wrapper = QueryWrapper.create().select(UserTableDef.USER.NAME, DeptTableDef.DEPT.DEPT_NAME).from(UserTableDef.USER).leftJoin(DeptTableDef.DEPT).on(UserTableDef.USER.DEPT_ID.eq(DeptTableDef.DEPT.ID)).where(UserTableDef.USER.AGE.gt(25));List<JoinUserDeptVO> list = userMapper.selectListByQueryAs(wrapper, JoinUserDeptVO.class);

配合 VO 类进行字段映射即可完成关联查询的结果封装。


♻️ 与 MyBatis 的区别

功能MyBatisMyBatis-Flex
XML 配置需要可选
DSL 构建 SQL不支持✅ 原生支持
代码生成第三方工具内置支持
通用 CRUD需手动实现✅ 内置
性能优化自主优化内置分页、缓存扩展支持
学习曲线

⚙️ 常见问题 & 调试技巧

1. 如何查看生成的 SQL?

mybatis-flex:global-config:print-sql: true

2. 如何使用枚举映射?

@EnumValue
private UserStatus status;

结合枚举和注解可实现自动枚举值存储。


🧰 推荐使用场景

  • 构建中小型企业应用,快速开发数据访问层;
  • 替代繁琐的 XML SQL 和代码模板;
  • 精简传统 MyBatis 项目的冗余代码;
  • 快速构建原型系统、后台管理系统。

🧠 小结

MyBatis-Flex 是对传统 MyBatis 的一次现代化升级,保留了灵活性,又大幅提升了开发效率。其语法优雅、DSL 查询强大、自动代码生成非常适合中小团队快速开发。

如果你已经厌倦了写冗长的 XML,又不想被全自动 ORM 框架束缚(如 JPA),那么 MyBatis-Flex 可能就是你要找的平衡点。


📎 附录资源

  • 官方文档
  • GitHub 项目
  • 代码生成器使用文档
  • 在线示例项目

如需我协助你将这篇文章格式化为 Markdown 文档、发布到博客平台,或补充实战项目示例,请随时告知!

相关文章:

MyBatis-Flex 全面指南:下一代轻量级持久层框架实战入门

&#x1f680; MyBatis-Flex 全面指南&#xff1a;下一代轻量级持久层框架实战入门 本文将带你全面了解 MyBatis-Flex 的特性、常见用法、最佳实践&#xff0c;帮助你高效构建更简洁、更灵活的 Java 持久层代码。 &#x1f9e9; 什么是 MyBatis-Flex&#xff1f; MyBatis-Flex…...

第十六章 EMQX黑名单与连接抖动检测

系列文章目录 第一章 总体概述 第二章 在实体机上安装ubuntu 第三章 Windows远程连接ubuntu 第四章 使用Docker安装和运行EMQX 第五章 Docker卸载EMQX 第六章 EMQX客户端MQTTX Desktop的安装与使用 第七章 EMQX客户端MQTTX CLI的安装与使用 第八章 Wireshark工具的安装与使用 …...

WebSphere(WAS)

WebSphere &#xff08;WebSphere Application Server&#xff09;为 SOA 环境提供软件&#xff0c;以实现动态的、互联的业务流程&#xff0c;为所有业务情形提供高度有效的应用程序基础架构。WebSphere 是 IBM 的应用程序和集成软件平台&#xff0c;包含所有必要的中间件基础…...

新编辑器编写指南--给自己的备忘

欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持&#x…...

xPSR

在 ARM Cortex-M3 中&#xff0c;​xPSR&#xff08;组合程序状态寄存器&#xff09;​​ 是核心的状态控制寄存器&#xff0c;由三个子状态寄存器合并而成&#xff0c;用于记录处理器的运算状态、中断状态和执行环境。以下是其深度解析&#xff1a; &#x1f50d; ​一、xPSR …...

鸿蒙网络数据传输案例实战

一、案例效果截图 二、案例运用到的知识点 核心知识点 网络连接管理&#xff1a;connection模块HTTP数据请求&#xff1a;http模块RPC数据请求&#xff1a;rcp模块文件管理能力&#xff1a;fileIo模块、fileUri模块 其他知识点 ArkTS 语言基础V2版状态管理&#xff1a;Comp…...

【JavaEE】-- 网络原理

文章目录 1. 网络发展史1.1 广域网1.2 局域网 2. 网络通信基础2.1 IP地址2.2 端口号2.3 认识协议2.4 五元组2.5 协议分层2.5.1 分层的作用2.5.2 OSI七层模型&#xff08;教科书&#xff09;2.5.3 TCP/IP五层&#xff08;或四层&#xff09;模型&#xff08;工业中常用&#xff…...

1.RV1126-OPENCV 交叉编译

一.下载opencv-3.4.16.zip到自己想装的目录下 二.解压并且打开 opencv 目录 先用 unzip opencv-3.4.16.zip 来解压 opencv 的压缩包&#xff0c;并且进入 opencv 目录(cd opencv-3.4.16) 三. 修改 opencv 的 cmake 脚本的内容 先 cd platforms/linux 然后修改 arm-gnueabi.to…...

PySide6 GUI 学习笔记——常用类及控件使用方法(标签控件QLabel)

文章目录 标签控件QLabel及其应用举例标签控件QLabel的常用方法及信号应用举例Python 代码示例1Python 代码示例2 小结 标签控件QLabel及其应用举例 QLabel 是 PySide6.QtWidgets 模块中的一个控件&#xff0c;用于在界面上显示文本或图像。它常用于作为标签、提示信息或图片展…...

CSS (mask)实现服装动态换色:创意与技术的完美融合

在网页开发中&#xff0c;我们常常会遇到需要对图片元素进行个性化处理的需求&#xff0c;比如改变图片中特定部分的颜色。今天&#xff0c;我们就来探讨一种通过 CSS 和 JavaScript 结合&#xff0c;实现服装动态换色的有趣方法。 一、代码整体结构分析 上述代码构建了一个完…...

基于51单片机的音乐盒汽车喇叭调音量proteus仿真

地址&#xff1a; https://pan.baidu.com/s/1l3CSSMi4uMV5-XLefnKoSg 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C51 是一款常用的 8 位单片机&#xff0c;由 Atmel 公司&#xff08;现已被 Microchip 收…...

彻底理解Spring三级缓存机制

文章目录 前言一、Spring解决循环依赖时&#xff0c;为什么要使用三级缓存&#xff1f; 前言 Spring解决循环依赖的手段&#xff0c;是通过三级缓存&#xff1a; singletonObjects&#xff1a;存放所有生命周期完整的单例对象。&#xff08;一级缓存&#xff09;earlySingleto…...

MacOs 安装局域网 gitlab 记录

1、安装git brew install git > Downloading https://homebrew.bintray.com/bottles/git-2.7.0.el_capitan.bottle ######################################################################## 100.0% > Pouring git-2.7.0.el_capitan.bottle.tar.gz > Caveats The O…...

Flutter 与 Android 原生布局组件对照表(完整版)

本对照表用于帮助 Android 开发者快速理解 Flutter 中的布局组件与原生布局的关系。 &#x1f4d8; Flutter ↔ Android 布局组件对照表 Flutter WidgetAndroid View/Layout说明ContainerFrameLayout / View通用容器&#xff0c;可设置背景、边距、对齐等RowLinearLayout (hor…...

【产品经理从0到1】自媒体端产品设计

后台的定义 “后台” 与“前台”都是相对独立的平台&#xff0c;前台是服务于互联网用户的平台 &#xff0c;后台主要是支撑前台页面内容、数据及对前台业务情况的统计分析的系统&#xff1b; 后台与前台的区别 第1&#xff1a;使用用户不同 前台用户&#xff1a;互联网用户…...

017搜索之深度优先DFS——算法备赛

深度优先搜索 如果说广度优先搜索是逐层扩散&#xff0c;那深度优先搜索就是一条道走到黑。 深度优先遍历是用递归实现的&#xff0c;预定一条顺序规则&#xff08;如上下左右顺序&#xff09; &#xff0c;一直往第一个方向搜索直到走到尽头或不满足要求后返回上一个叉路口按…...

解决 maven编译项目-Fatal error compiling: 无效的目标发行版: 21 -> [Help 1]

目录 1. 问题描述 2. 排查思路 3. 设置-指定maven使用jdk21 4. 参考资料 1. 问题描述 在idea中使用maven编译时,在系统环境变量中已经设置了jdk为21,但是在执行mvn package时,确提示 Fatal error compiling: 无效的目标发行版: 21 -> [Help 1] [ERROR] Failed to e…...

Thinkphp6实现websocket

项目需要连接一台自动售货机&#xff0c;售货机要求两边用websocket连接,监听9997端口。本文实现了一个基于PHP的WebSocket服务器&#xff0c;用于连接自动售货机&#xff0c;支持start/stop/restart命令操作 1.新建文件 新建文件 /command/socket.php <?php namespace a…...

web-css

一.CSS选择器&#xff1a; 1.基础选择器 基本选择器&#xff1a; >.标签选择器 格式&#xff1a;标签名称{} >.类选择器&#xff08;重&#xff09; 格式&#xff1a;.class属性的值{} >.id选择器 格式&#xff1a;#id属性的值{} >.通配符&#xff08;表示所有&am…...

关于 smali:2. 从 Java 到 Smali 的映射

一、对照 Java 代码与 Smali 代码差异 1.1 方法调用差异&#xff1a;Java vs Smali Java 方法分类&#xff1a; 方法类型Java 示例Smali 指令特点说明静态方法Utils.print("hi")invoke-static没有 this 指针实例方法obj.show()invoke-virtual有 this&#xff0c;虚…...

三、zookeeper 常用shell命令

作者&#xff1a;IvanCodes 日期&#xff1a;2025年5月28日 专栏&#xff1a;Zookeeper教程 ZooKeeper Shell (zkCli.sh) 是与ZooKeeper服务器交互的核心工具。本教程将详细介绍常用命令&#xff0c;并重点解析ZooKeeper数据节点 (ZNode) 的特性与分类。 思维导图 一、连接 Zo…...

分布式流处理与消息传递——Paxos Stream 算法详解

Java 实现 Paxos Stream 算法详解 一、Paxos Stream 核心设计 #mermaid-svg-cEJcmpaQwLXpEbx9 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-cEJcmpaQwLXpEbx9 .error-icon{fill:#552222;}#mermaid-svg-cEJcmpaQw…...

智变与重构:AI 赋能基础教育教学的范式转型研究报告

一、研究背景与核心价值 &#xff08;一&#xff09;技术驱动下的教育转型浪潮 在全球数字化转型加速的背景下&#xff0c;人工智能作为核心技术力量&#xff0c;正重塑基础教育生态。据《人工智能赋能未来教育研究报告》指出&#xff0c;我国教育数字化战略行动已推动超 70…...

平衡三进制

平衡三进制 - OI Wiki https://oi-wiki.org/math/balanced-ternary/ 上海市计算机学会竞赛平台 | YACS 方法一&#xff0c;先分离后进位 #include <iostream> using namespace std; int n, a[100], cnt; bool flag; int main() {cin >> n;if(n0){cout <<…...

针对Python开发的工具推荐及分析,涵盖集成开发环境(IDE)、轻量级工具、在线开发平台、代码管理工具等)

以下是针对Python开发的工具推荐及全面分析&#xff0c;涵盖集成开发环境&#xff08;IDE&#xff09;、轻量级工具、在线开发平台、代码管理工具等&#xff0c;结合不同场景和需求进行分类说明&#xff1a; 目录 一、集成开发环境&#xff08;IDE&#xff09; 1. PyCharm 2…...

960g轻薄本,把科技塞进巧克力盒子

朋友们&#xff0c;谁懂啊 最近本打工人被同事疯狂种草了一款 “巧克力盒子” 华硕灵耀 14 Air 骁龙版&#xff01; 960g的重量比一瓶大可乐还轻 塞进通勤包毫无压力 连健身房的瑜伽垫都能多卷两圈 这台行走的生产力工具&#xff0c;到底有啥魔法&#xff1f; 今天就带…...

xcode 编译运行错误 Sandbox: rsync(29343) deny(1) file-write-create

解决方法 方法一&#xff1a;修改Targets -> Build Settings 中 ENABLE_USER_SCRIPT_SANDBOXING 设置 NO 方法二&#xff1a;项目使用cocoaPods进行三方管理 且 使用了 use_frameworks&#xff0c;把 use_frameworks 注释掉,然后重新自行pod install...

C# 基于 Windows 系统与 Visual Studio 2017 的 Messenger 消息传递机制详解:发布-订阅模式实现

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;10年以上C/C, C#, Java等多种编程语言开发经验&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开…...

ComfyUI+阿里Wan2.1+内网穿透技术:本地AI视频生成系统搭建实战

文章目录 前言1.软件准备1.1 ComfyUI1.2 文本编码器1.3 VAE1.4 视频生成模型 2.整合配置3. 本地运行测试4. 公网使用Wan2.1模型生成视频4.1 创建远程连接公网地址 5. 固定远程访问公网地址总结 前言 各位技术爱好者&#xff0c;今天为您带来一组创新性的AI应用方案&#xff01…...

腾讯云开发者社区文章内容提取免费API接口教程

接口简介&#xff1a; 提取指定腾讯云开发者社区文章内容。本接口仅做内容提取&#xff0c;未经作者授权请勿转载。 请求地址&#xff1a; https://cn.apihz.cn/api/caiji/tencent.php 请求方式&#xff1a; POST或GET。 请求参数&#xff1a; 【名称】【参数】【必填】【说…...