# 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)类中,以避免模块间的循环依赖。