Easy-QueryJava/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-queryEasy-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.versionlast-version/easy-query.version /properties dependency groupIdcom.easy-query/groupId artifactIdsql-springboot-starter/artifactId version${easy-query.version}/version /dependency控制台模式依赖非Spring环境dependency groupIdcom.easy-query/groupId artifactIdsql-api-proxy/artifactId version${easy-query.version}/version /dependency dependency groupIdcom.easy-query/groupId artifactIdsql-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?serverTimezoneGMT%2B8characterEncodingutf-8useSSLfalse); 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 ProxyEntityAvailableBlogEntity, 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();生成的SQLSELECT t.id,t.stars,t.title,t.create_time FROM t_topic t WHERE t.id ? LIMIT 1五大约束隐式特性Easy-Query的五大隐式特性是其核心竞争力能够大幅简化复杂查询的编写1. 隐式Join自动处理一对一和多对一关系的关联查询ListSysUser userInXXCompany entityQuery.queryable(SysUser.class) .where(user - { user.company().name().like(xx Company); }) .orderBy(user - { user.company().registerMoney().desc(); user.birthday().asc(); }).toList();2. 隐式子查询自动处理一对多和多对多关系的子查询ListCompany 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. 隐式分组将多个子查询优化合并为分组查询ListCompany 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条记录操作ListCompany 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()语法实现复杂条件聚合ListDraft3Long, 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();完整单表查询示例包含过滤、聚合、投影和排序的综合示例ListDraft3String, 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();生成的SQLSELECT 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 AbstractShardingMonthInitializerTopicShardingTime { 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-mysqlmysqlmysqlOraclesql-oracleoracleoraclePostgreSQLsql-pgsqlpgsqlpgsqlSQL Serversql-mssqlmssqlmssqlH2sql-h2h2h2SQLitesql-sqlitesqlitesqliteClickHousesql-clickhouseclickhouseclickhouse达梦Damengsql-damengdamengdameng人大金仓KingbaseESsql-kingbase-eskingbase_eskingbase_es高斯数据库sql-gauss-dbgauss-dbgauss-dbDuckDBsql-duckdbduckdbduckdbDB2sql-db2db2db2 社区与支持加入交流群欢迎加入Easy-Query交流群获取最新资讯和技术支持Easy-Query交流群学习资源官方文档可通过项目源码中的文档模块获取详细使用指南示例代码sql-test/src/main/java/com/easy/query/test/ 目录下包含丰富的示例贡献代码Easy-Query是开源项目欢迎通过以下方式参与贡献Fork仓库创建特性分支 (git checkout -b feature/amazing-feature)提交更改 (git commit -m Add some amazing feature)推送到分支 (git push origin feature/amazing-feature)创建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),仅供参考