尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Easy-Query:Java/Kotlin高性能轻量级ORM框架完全指南

Easy-Query:Java/Kotlin高性能轻量级ORM框架完全指南
📅 发布时间:2026/7/16 19:11:31

Easy-Query:Java/Kotlin高性能轻量级ORM框架完全指南

【免费下载链接】easy-queryjava/kotlin high performance lightweight solution for jdbc query,support oltp and olap query,一款java下面支持强类型、轻量级、高性能的ORM,致力于解决jdbc查询,拥有对象模型筛选、隐式子查询、隐式join项目地址: https://gitcode.com/gh_mirrors/ea/easy-query

Easy-Query是一款面向Java/Kotlin开发者的高性能轻量级ORM框架,专注于解决JDBC查询问题,提供强类型支持、对象模型筛选、隐式子查询和隐式Join等核心功能,同时兼顾OLTP和OLAP场景需求。本文将全面介绍这款框架的核心优势、快速上手方法以及高级特性,帮助开发者轻松掌握这一高效数据访问工具。

🚀 为什么选择Easy-Query?

在众多ORM框架中,Easy-Query凭借其独特的设计理念和技术优势脱颖而出:

  • 极致轻量:无依赖设计,核心包体积不足500KB,轻松集成到任何Java/Kotlin项目
  • 性能卓越:通过代理模式和SQL优化技术,性能接近原生JDBC
  • 强类型支持:全程编译时类型检查,杜绝运行时SQL错误
  • 隐式查询能力:自动处理关联查询、子查询和分组操作,大幅减少代码量
  • 多数据库支持:兼容MySQL、Oracle、PostgreSQL等主流数据库,提供统一查询体验

核心功能架构

Easy-Query的功能架构主要分为以下几个核心模块:

  • sql-core:框架核心,提供基础查询能力和表达式解析
  • sql-db-support:数据库方言支持,适配不同数据库特性
  • sql-extension:扩展模块,包含缓存、搜索等增强功能
  • sql-platform:平台集成,支持Spring Boot、Solon等主流框架

🔧 快速上手指南

环境准备

Easy-Query支持JDK 8及以上版本,兼容Spring Boot 2.x/3.x和Solon 2.x等主流开发框架。推荐使用Maven或Gradle进行依赖管理。

安装依赖

Maven依赖配置:

<properties> <easy-query.version>last-version</easy-query.version> </properties> <dependency> <groupId>com.easy-query</groupId> <artifactId>sql-springboot-starter</artifactId> <version>${easy-query.version}</version> </dependency>

控制台模式依赖(非Spring环境):

<dependency> <groupId>com.easy-query</groupId> <artifactId>sql-api-proxy</artifactId> <version>${easy-query.version}</version> </dependency> <dependency> <groupId>com.easy-query</groupId> <artifactId>sql-mysql</artifactId> <version>${easy-query.version}</version> </dependency>

初始化配置

Spring Boot环境:

只需添加依赖即可自动配置,无需额外代码。

控制台模式初始化:

// 初始化数据源 HikariDataSource dataSource = new HikariDataSource(); dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/easy-query-test?serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false"); dataSource.setUsername("root"); dataSource.setPassword("root"); dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); // 构建EasyQuery客户端 EasyQueryClient easyQueryClient = EasyQueryBootstrapper.defaultBuilderConfiguration() .setDataSource(dataSource) .useDatabaseConfigure(new MySQLDatabaseConfiguration()) .build(); // 获取实体查询接口 EasyEntityQuery easyEntityQuery = new DefaultEasyEntityQuery(easyQueryClient);

💡 核心功能详解

实体定义

使用注解定义实体类,支持逻辑删除、主键策略等特性:

@Data @Table("t_blog") @EntityProxy // 启用代理功能 public class BlogEntity extends BaseEntity implements ProxyEntityAvailable<BlogEntity, BlogEntityProxy> { private String title; private String content; private String url; private Integer star; private LocalDateTime publishTime; private BigDecimal score; private Integer status; private BigDecimal order; private Boolean isTop; private Boolean top; }

单表查询

简洁的API设计,支持链式调用:

Topic topic = easyEntityQuery .queryable(Topic.class) .where(o -> o.id().eq("3")) .firstOrNull();

生成的SQL:

SELECT t.`id`,t.`stars`,t.`title`,t.`create_time` FROM `t_topic` t WHERE t.`id` = ? LIMIT 1

五大约束隐式特性

Easy-Query的五大隐式特性是其核心竞争力,能够大幅简化复杂查询的编写:

1. 隐式Join

自动处理一对一和多对一关系的关联查询:

List<SysUser> userInXXCompany = entityQuery.queryable(SysUser.class) .where(user -> { user.company().name().like("xx Company"); }) .orderBy(user -> { user.company().registerMoney().desc(); user.birthday().asc(); }).toList();
2. 隐式子查询

自动处理一对多和多对多关系的子查询:

List<Company> companies = entityQuery.queryable(Company.class) .where(company -> { company.users().any(u -> u.name().like("Xiao Ming")); company.users().where(u -> u.name().like("Xiao Ming")) .max(u -> u.birthday()).gt(LocalDateTime.of(2000,1,1,0,0,0)); }).toList();
3. 隐式分组

将多个子查询优化合并为分组查询:

List<Company> companies = entityQuery.queryable(Company.class) .subQueryToGroupJoin(company -> company.users()) .where(company -> { company.users().any(u -> u.name().like("Xiao Ming")); company.users().where(u -> u.name().like("Xiao Ming")) .max(u -> u.birthday()).gt(LocalDateTime.now()); }).toList();
4. 隐式分区分组

支持一对多和多对多关系的首条/N条记录操作:

List<Company> companies = entityQuery.queryable(Company.class) .where(company -> { company.users().orderBy(u->u.birthday().desc()).first().name().eq("Xiao Ming"); company.users().orderBy(u->u.birthday().desc()).element(0) .birthday().lt(LocalDateTime.now()); }).toList();
5. 隐式CASE WHEN表达式

通过property.aggregate.filter()语法实现复杂条件聚合:

List<Draft3<Long, Long, BigDecimal>> result = entityQuery.queryable(SysUser.class) .where(user -> { user.birthday().lt(LocalDateTime.now()); }) .select(user -> Select.DRAFT.of( user.id().count().filter(() -> { user.address().eq("Hangzhou"); }), user.id().count().filter(() -> { user.address().eq("Beijing"); }), user.age().avg().filter(() -> { user.address().eq("Beijing"); }) )).toList();

完整单表查询示例

包含过滤、聚合、投影和排序的综合示例:

List<Draft3<String, Integer, LocalDateTime>> myBlog = easyEntityQuery.queryable(BlogEntity.class) .where(b -> { b.content().like("my blog"); }) .groupBy(b -> GroupKeys.of(b.title())) .having(group -> { group.groupTable().star().sum().lt(10); }) .select(group -> Select.DRAFT.of( group.key1(), group.groupTable().star().sum().asAnyType(Integer.class), group.groupTable().createTime().max() )) .orderBy(group -> group.value3().desc()) .limit(2, 2) .toList();

生成的SQL:

SELECT t1.`value1` AS `value1`, t1.`value2` AS `value2`, t1.`value3` AS `value3` FROM (SELECT t.`title` AS `value1`, SUM(t.`star`) AS `value2`, MAX(t.`create_time`) AS `value3` FROM `t_blog` t WHERE t.`deleted` = false AND t.`content` LIKE '%my blog%' GROUP BY t.`title` HAVING SUM(t.`star`) < 10) t1 ORDER BY t1.`value3` DESC LIMIT 2,2

📊 分库分表支持

Easy-Query提供强大的分库分表能力,支持表分片、数据库分片以及混合分片策略。

表分片示例

@Data @Table(value = "t_topic_sharding_time", shardingInitializer = TopicShardingTimeShardingInitializer.class) public class TopicShardingTime { @Column(primaryKey = true) private String id; private Integer stars; private String title; @ShardingTableKey // 分片键 private LocalDateTime createTime; } // 分片初始化器 public class TopicShardingTimeShardingInitializer extends AbstractShardingMonthInitializer<TopicShardingTime> { @Override protected LocalDateTime getBeginTime() { return LocalDateTime.of(2020, 1, 1, 1, 1); } @Override protected LocalDateTime getEndTime() { return LocalDateTime.of(2023, 5, 1, 0, 0); } }

数据库分片示例

@Data @Table(value = "t_topic_sharding_ds", shardingInitializer = DataSourceShardingInitializer.class) public class TopicShardingDataSource { @Column(primaryKey = true) private String id; private Integer stars; private String title; @ShardingDataSourceKey // 数据源分片键 private LocalDateTime createTime; }

🛠️ 数据操作全指南

插入数据

Topic topic = new Topic(); topic.setId(String.valueOf(0)); topic.setStars(100); topic.setTitle("标题0"); topic.setCreateTime(LocalDateTime.now()); long rows = easyEntityQuery.insertable(topic).executeRows();

更新数据

实体更新:

Topic topic = easyEntityQuery.queryable(Topic.class) .where(o -> o.id().eq("7")).firstNotNull("未找到对应的数据"); topic.setTitle("新标题"); long rows = easyEntityQuery.updatable(topic).executeRows();

表达式更新:

long rows = easyEntityQuery.updatable(Topic.class) .setColumns(o -> { o.stars().set(12); }) .where(o -> o.id().eq("2")) .executeRows();

删除数据

// 按条件删除 long rows = easyQuery.deletable(Topic.class) .where(o -> o.title().eq("title998")) .executeRows(); // 按实体删除 Topic topic = easyQuery.queryable(Topic.class).whereId("997").firstNotNull("未找到数据"); long rows = easyQuery.deletable(topic).executeRows();

📚 数据库支持矩阵

Easy-Query支持多种主流数据库,提供统一的查询体验:

数据库名称包名Spring Boot配置Solon配置
MySQLsql-mysqlmysqlmysql
Oraclesql-oracleoracleoracle
PostgreSQLsql-pgsqlpgsqlpgsql
SQL Serversql-mssqlmssqlmssql
H2sql-h2h2h2
SQLitesql-sqlitesqlitesqlite
ClickHousesql-clickhouseclickhouseclickhouse
达梦Damengsql-damengdamengdameng
人大金仓KingbaseESsql-kingbase-eskingbase_eskingbase_es
高斯数据库sql-gauss-dbgauss-dbgauss-db
DuckDBsql-duckdbduckdbduckdb
DB2sql-db2db2db2

🌟 社区与支持

加入交流群

欢迎加入Easy-Query交流群,获取最新资讯和技术支持:

Easy-Query交流群

学习资源

  • 官方文档:可通过项目源码中的文档模块获取详细使用指南
  • 示例代码:sql-test/src/main/java/com/easy/query/test/ 目录下包含丰富的示例

贡献代码

Easy-Query是开源项目,欢迎通过以下方式参与贡献:

  1. Fork仓库
  2. 创建特性分支 (git checkout -b feature/amazing-feature)
  3. 提交更改 (git commit -m 'Add some amazing feature')
  4. 推送到分支 (git push origin feature/amazing-feature)
  5. 创建Pull Request

📝 总结

Easy-Query作为一款高性能轻量级ORM框架,通过创新的隐式查询技术和简洁的API设计,极大地简化了Java/Kotlin应用中的数据访问层开发。无论是简单的单表操作还是复杂的分库分表场景,Easy-Query都能提供高效、优雅的解决方案。

如果你正在寻找一款既能提高开发效率又不牺牲性能的ORM框架,不妨尝试Easy-Query,相信它会成为你项目中的得力助手!

要开始使用Easy-Query,请克隆仓库:git clone https://gitcode.com/gh_mirrors/ea/easy-query

【免费下载链接】easy-queryjava/kotlin high performance lightweight solution for jdbc query,support oltp and olap query,一款java下面支持强类型、轻量级、高性能的ORM,致力于解决jdbc查询,拥有对象模型筛选、隐式子查询、隐式join项目地址: https://gitcode.com/gh_mirrors/ea/easy-query

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

  • Paru深度解析:如何用Rust构建的AUR助手解决Arch Linux包管理难题
  • 合肥包河区二手钻石变现实测,逸程正规门店当场全款结算避坑指南 - 逸程奢侈品回收中心
  • 消防远程联网监控平台系统之UI界面设计-设备信息查询界面

最新新闻

  • Codex Windows认证失败的7个关键排查点
  • ClickHouse在实时数仓中的架构定位:从Lambda到Kappa架构的存储层演进分析
  • 渭南黄金回收避坑实录:18K金、金条、足金首饰怎么卖才划算?五店实测还原真相 - 小城生活闲谈
  • 5分钟搭建浏览器端人体姿态搜索系统:免费开源实时动作分析终极指南
  • Spyc与JSON/XML对比:为什么选择YAML作为PHP数据交换格式
  • openEuler SBOM-website完整指南:从安装到部署的一站式解决方案

日新闻

  • Toon Boom Harmony 高效工作流:从节点视图到镜头标记的实战技巧
  • 真力时售后维修电话,为您提供专业腕表保养与故障修复服务权威公示(2026年7月最新) - 亨得利官方服务中心
  • 【C++】类和对象--构造函数进阶(初始化列表与explicit)

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号