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

news2025/6/4 12:54:49

🚀 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=false
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis-flex:
  mapper-locations: classpath*:/mapper/**/*.xml

3. 编写实体类

@Table(value = "user")
public class User {
    @Id
    private 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 {

    @Resource
    private 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 文档、发布到博客平台,或补充实战项目示例,请随时告知!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2395954.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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

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

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

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

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

一、案例效果截图 二、案例运用到的知识点 核心知识点 网络连接管理&#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…

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

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

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

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

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…

三、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…

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…

利用海外代理IP,做Twitter2026年全球趋势数据分析

近年来&#xff0c;社交媒体趋势分析逐渐成为品牌监控、市场洞察和消费者研究的必备工具。而当谈到全球趋势数据分析&#xff0c;很多人都会立即想到 Twitter趋势&#xff08;逼近连美丽国的总统都喜欢在上面发表自己的看法- -!!!&#xff09;。Twitter趋势&#xff0c;即Twitt…