# RuoYi-Vue-Flex **Repository Path**: yhan219/ruoyi-vue-flex ## Basic Information - **Project Name**: RuoYi-Vue-Flex - **Description**: RuoYi-Vue-Flex是基于RuoYi-Vue-Plus的一个快速开发框架。将RuoYi-Vue-Plus中使用的MyBatis-Plus替换为MyBatis-Flex,并根据两个ORM框架使用的不同修改了部分逻辑。集成 Sa-Token、Mybatis-Flex、PowerJob、Jackson、SpringDoc、Hutool、OSS 定期同步等 - **Primary Language**: Java - **License**: MIT - **Default Branch**: mybatis-flex - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 89 - **Forks**: 37 - **Created**: 2023-10-18 - **Last Updated**: 2025-08-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: mybatis-flex, RuoYi-Vue-Plus, ruoyi-vue-plus-flex, RuoYi-Vue, ruoyi-flex ## README
--- # 简介 [![码云Gitee](https://gitee.com/yhan219/ruoyi-vue-flex/badge/star.svg?theme=blue)](https://gitee.com/yhan219/ruoyi-vue-flex) [![GitHub](https://img.shields.io/github/stars/yhan219/RuoYi-Vue-Flex.svg?style=social&label=Stars)](https://github.com/yhan219/RuoYi-Vue-Flex) [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://gitee.com/yhan219/RuoYi-Vue-Flex/blob/mybatis-flex/LICENSE)
[![RuoYi-Vue-Flex](https://img.shields.io/badge/ruoyi_vue_flex-5.1.2-success.svg)](https://gitee.com/yhan219/RuoYi-Vue-Flex) [![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.1-blue.svg)]() [![JDK-17](https://img.shields.io/badge/JDK-17-green.svg)]() [![JDK-21](https://img.shields.io/badge/JDK-21-green.svg)]() RuoYi-Vue-Flex是基于[RuoYi-Vue-Plus 5.X](https://gitee.com/dromara/RuoYi-Vue-Plus/tree/5.X/)分支的一个快速开发框架。 RuoYi-Vue-Plus 是重写 RuoYi-Vue 针对 `分布式集群与多租户` 场景全方位升级(不兼容原框架) RuoYi-Vue-Flex将RuoYi-Vue-Plus中使用的mybatis-plus替换为mybatis-flex,并根据两个ORM框架使用的不同修改了部分逻辑。底层完全重写。 **RuoYi-Vue-Flex与RuoYi-Vue-Plus功能完全相同。** RuoYi-Vue-Flex将定期同步RuoYi-Vue-Plus,非冲突功能每天升级,冲突功能最迟不超过一周完成升级。 另有cloud版[RuoYi-Cloud-Flex](https://gitee.com/yhan219/ruoyi-cloud-flex)欢迎使用 # 版本 与RuoYi-Vue-Plus保持一致,当前版本`5.1.2` # 与RuoYi-Vue-Plus的差异 ## 前端框架差异 默认使用[ruoyi-plus-vben](https://gitee.com/dapppp/ruoyi-plus-vben),可在配置文件中修改为[plus-ui](https://gitee.com/JavaLionLi/plus-ui) ``` # 代码生成 gen: # 使用的模版 默认是vben,原生的是vue platform: vben ``` ## 数据权限用法差异 数据权限注解,修改为类,原写法: ```java @DataPermission({ @DataColumn(key = "deptName", value = "d.dept_id"), @DataColumn(key = "userName", value = "r.create_by") }) Page selectPageRoleList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); ``` 现写法: ```java Page selectPageRoleList(PageQuery pageQuery, QueryWrapper queryWrapper){ return paginateAs(pageQuery, queryWrapper, DataColumn.of("deptName", "d.dept_id"), DataColumn.of("userName", "r.create_by")); } ``` > 注:尝试写过拦截器以达到用法完全相同的目的,可惜拦截器功能和MyBatis-Flex的插件不兼容,使用了数据权限插件,则无法使用MyBatis-Flex的多租户插件等。如果你有更好的方法,欢迎pr ## 忽略租户写法差异 - 配置中的差异: 原写法: 在yml中配置忽略的表,MyBatis-Flex不支持,但MyBatis-Flex会默认忽略没有多租户字段的表 - 代码中的差异: 原写法:在mapper中配置注解: ```java @InterceptorIgnore(tenantLine = "true") SysUserVo selectTenantUserByUserName(@Param("userName") String userName, @Param("tenantId") String tenantId); ``` 现写法: ```java // mapper中删除InterceptorIgnore注解,在service中手动忽略 TenantHelper.ignore(() -> baseMapper.selectTenantUserByUserName(userName, tenantId)); ``` ## 特别鸣谢 [RuoYi-Vue-Plus](https://gitee.com/dromara/RuoYi-Vue-Plus/tree/5.X/) [MyBatis-Flex](https://gitee.com/mybatis-flex/mybatis-flex) [ruoyi-plus-vben](https://gitee.com/dapppp/ruoyi-plus-vben) ## 预览图 ![](https://raw.githubusercontent.com/yhan219/blog-image/master/yhan/iShot_2023-12-21_19.42.28.jpg) ![](https://raw.githubusercontent.com/yhan219/blog-image/master/yhan/iShot_2023-12-21_19.42.50.jpg) ![](https://raw.githubusercontent.com/yhan219/blog-image/master/yhan/iShot_2023-12-21_19.42.59.jpg) ![](https://raw.githubusercontent.com/yhan219/blog-image/master/yhan/iShot_2023-12-21_19.43.09.jpg) ![](https://raw.githubusercontent.com/yhan219/blog-image/master/yhan/iShot_2023-12-21_19.43.29.jpg) ![](https://raw.githubusercontent.com/yhan219/blog-image/master/yhan/iShot_2023-12-21_19.43.37.jpg) ![](https://raw.githubusercontent.com/yhan219/blog-image/master/yhan/iShot_2023-12-21_19.43.46.jpg) ![](https://raw.githubusercontent.com/yhan219/blog-image/master/yhan/iShot_2023-12-21_19.44.05.jpg) ![](https://raw.githubusercontent.com/yhan219/blog-image/master/yhan/iShot_2023-12-21_19.44.25.jpg) ![](https://raw.githubusercontent.com/yhan219/blog-image/master/yhan/iShot_2023-12-21_19.44.40.jpg) ![](https://raw.githubusercontent.com/yhan219/blog-image/master/yhan/iShot_2023-12-21_19.44.47.jpg) ![](https://raw.githubusercontent.com/yhan219/blog-image/master/yhan/iShot_2023-12-21_19.45.12.jpg) ![](https://raw.githubusercontent.com/yhan219/blog-image/master/yhan/iShot_2023-12-21_19.45.32.jpg) ![](https://raw.githubusercontent.com/yhan219/blog-image/master/yhan/iShot_2023-12-21_19.45.48.jpg) ![](https://raw.githubusercontent.com/yhan219/blog-image/master/yhan/iShot_2023-12-21_19.46.10.jpg) ![](https://raw.githubusercontent.com/yhan219/blog-image/master/yhan/iShot_2023-12-21_19.55.28.jpg)