# 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
---
# 简介
[](https://gitee.com/yhan219/ruoyi-vue-flex)
[](https://github.com/yhan219/RuoYi-Vue-Flex)
[](https://gitee.com/yhan219/RuoYi-Vue-Flex/blob/mybatis-flex/LICENSE)
[](https://gitee.com/yhan219/RuoYi-Vue-Flex)
[]()
[]()
[]()
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)
## 预览图















