# RuoYi-EasyQuery
**Repository Path**: DongXYstdu/ry-easyquery
## Basic Information
- **Project Name**: RuoYi-EasyQuery
- **Description**: RuoYi-EasyQuery是一套基于若依RuoYi框架并集成EasyQuery的快速开发平台
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2025-12-30
- **Last Updated**: 2026-01-01
## Categories & Tags
**Categories**: Uncategorized
**Tags**: EasyQuery, ruoyi, SpringBoot
## README
RuoYi-EasyQuery
基于SpringBoot+Vue+EasyQuery前后端分离的Java快速开发框架
本项目参考ZAdmin项目
## 平台简介
RuoYi-EasyQuery是一套基于若依RuoYi框架并集成EasyQuery的快速开发平台,结合了EasyQuery强大的数据操作。
* 前端采用Vue、Element UI。
* 后端采用Spring Boot、Spring Security、Redis & Jwt。
* 集成EasyQuery ORM框架。
* 权限认证使用Jwt,支持多终端认证系统。
* 支持加载动态权限菜单,多方式轻松权限控制。
## EasyQuery特性
本项目集成了EasyQuery ORM框架,提供以下高级功能:
* **多数据源支持**:支持配置多个数据源,可根据业务需要动态切换数据源。
* **多租户支持**:内置多租户拦截器,自动为包含tenantId字段的实体添加租户条件。
* **审计功能**:内置审计拦截器,自动记录数据创建和修改信息。
* **雪花算法主键生成**:使用雪花算法生成唯一主键,避免主键冲突问题。
* **强大的查询功能**:基于EasyQuery的代理API,提供类型安全的查询操作。
* **灵活的分页查询**:封装通用的分页查询逻辑,支持多种排序和搜索方式。
## EasyQuery vs MyBatis 对比
| 特性 | MyBatis | EasyQuery |
|------|---------|-----------|
| 类型安全 | 运行时检查 | 编译期检查 |
| SQL编写方式 | XML/注解 | 链式API |
| 动态SQL实现 | XML标签 | 条件函数 |
| 性能表现 | 有反射开销,性能一般 | 零反射,性能更高 |
| 学习成本 | 较高,需学习XML语法和动态SQL标签 | 较低,使用Java API |
| 代码量 | 需要XML文件和Mapper接口,代码量大 | 实体类直接操作,代码简洁 |
| 维护性 | XML和Java代码分离,维护复杂 | 代码集中,易于维护 |
| 调试难度 | 需要查看XML映射,调试困难 | 直接查看Java代码,调试简单 |
| 事务管理 | 通过Spring管理 | 通过Spring管理 |
| 分页支持 | 需要PageHelper插件 | 内置分页支持 |
| 多表关联 | 通过resultMap配置 | 通过导航属性 |
| 动态条件 | 通过XML动态标签 | 通过条件函数 |
| SQL可见性 | SQL在XML中,可见性好 | 生成的SQL,可见性需配置 |
## EasyQuery核心优势
EasyQuery作为一款高性能、轻量级的ORM框架,具有以下显著优势:
### 五项隐式查询特性 🔥
* **隐式Join**:自动实现OneToOne、ManyToOne关系的join查询,支持筛选、排序和结果获取
* **隐式子查询**:自动实现OneToMany、ManyToMany关系的子查询,支持筛选、排序和聚合函数结果获取
* **隐式分组**:自动实现子查询优化合并,将多个子查询合并成一个分组查询,支持筛选、排序和聚合函数
* **隐式分区分组**:自动实现第一个、第N个数据的筛选、排序和聚合函数结果获取
* **隐式CASE WHEN表达式**:支持属性.聚合函数.筛选语法,如`o.age().sum().filter(()->o.name().like("123"))`
### 核心功能
* **零依赖**:框架本身基于Java8和org.jetbrains.annotations(编译时),真正做到了零依赖
* **强类型支持**:完整的Lambda表达式和代理模式,编译期检查字段名和类型,减少运行时错误
* **高性能查询**:优化的SQL生成和执行机制,支持OLTP和OLAP查询
* **丰富的API**:提供常用的返回集合、返回单个对象、返回分页,并提供动态条件、动态排序等功能
* **结构化DTO**:实现按数据库对象的映射关系快速创建DTO并拉取结构化数据
* **基于POJO**:框架基于POJO实现与数据库之间的访问,保证与市面上大部分ORM兼容
* **低学习成本**:实现类Stream API,将操作数据库转换成操作Java集合的方法
* **原生分库分表**:无需引入和部署任意中间件和额外jar包即可实现高性能分库分表
* **企业级数据库列加密**:支持企业级数据库列加密和解密,支持高性能的数据库加密列LIKE检索
* **乐观锁**:原生支持乐观锁实现数据库的数据并发安全性
* **数据追踪**:基于AOP实现数据库的数据变更追踪,生成最小颗粒的UPDATE
* **逻辑删除**:原生支持逻辑删除和个性化逻辑删除,支持记录删除时间、删除人和删除原因等自定义功能
* **计算属性**:提供内存计算属性和数据库计算属性,支持DSL内的筛选、排序和返回
* **无限扩展性**:框架内部所有服务都可以被用户自行替换,并可注入任意服务
### EasyQuery支持的数据库
* MySQL、Oracle、PostgreSQL、SqlServer、H2、SQLite、ClickHouse
* 达梦(Dameng)、人大金仓(KingbaseES)、高斯(GaussDB)、DB2、DuckDB等
### 高级特性
* **动态Join**:查询涉及关系表时自动添加JOIN,反之则不添加
* **子查询转GroupJoin**:全世界独一份的功能,解决多对多深层关系在ORM中的子查询过多导致的性能问题
* **结构化对象拉取**:按数据库对象的映射关系快速创建DTO并拉取结构化数据
* **任意SQL片段**:支持在DSL中穿插任意SQL片段来保证各种个性化SQL的实现
* **Code-First**:基于对象实体的数据库表结构快速生成与维护的解决方案
* **优雅的对象关系**:完美将DSL和对象关系结合,实现点点点即可完成数据库查询操作
* **DTO、VO直接返回**:直接由数据库结果集映射到DTO、VO,无需MapStruct等框架
## 若依内置功能
1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。
2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。
3. 岗位管理:配置系统用户所属担任职务。
4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。
5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。
7. 参数管理:对系统动态配置常用参数。
8. 通知公告:系统通知公告信息发布维护。
9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
10. 登录日志:系统登录日志记录查询包含登录异常。
11. 在线用户:当前系统中活跃用户状态监控。
12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载。
14. 系统接口:根据业务代码自动生成相关的api接口文档。
15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。
16. 缓存监控:对系统的缓存信息查询,命令统计等。
17. 在线构建器:拖动表单元素生成相应的HTML代码。
18. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。
## EasyQuery多数据源配置
项目支持多数据源配置,可在`application.yml`中配置:
```yaml
spring:
datasource:
dynamic:
primary:
type: com.zaxxer.hikari.HikariDataSource
url: jdbc:mysql://100.95.188.10:43306/db
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
ds2:
type: com.zaxxer.hikari.HikariDataSource
url: jdbc:postgresql://100.95.188.10:25432/db2
username: root
password: 123456
driver-class-name: org.postgresql.Driver
```
## ORM框架切换配置
项目支持在EasyQuery和MyBatis之间进行切换,可在`application.yml`中配置:
```yaml
ruoyi:
# ORM选择: mybatis 或 easyquery
orm: mybatis # 默认使用MyBatis,可切换为easyquery
```
通过配置`ruoyi.orm`参数,可以方便地在两种ORM框架之间切换,无需修改代码。
ORM切换配置位于[DataSourceSwitchConfig](file:///F:/Work\new-projects/ry-eq\RuoYi-EasyQuery/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DataSourceSwitchConfig.java#L19-L43)类中,以避免模块间的循环依赖。