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 的区别
功能 | MyBatis | MyBatis-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 文档、发布到博客平台,或补充实战项目示例,请随时告知!