EasyRelation 1.0 发布,简单强大的数据关联框架


当开发人员需要进行关联查询时,往往需要编写大量的冗余代码来处理数据之间的关系。这不仅浪费时间和精力,还会影响项目的可维护性和可扩展性。

EasyRelation 是一个简单、高效的自动关联数据框架,可以通过一行代码,自动关联查询并填充需要的数据,对于性能影响极小,且省略了大量的冗余代码。

该框架适应于当前对象中的字段需要关联查询,并赋值到当前对象的字段中,数据来源可以是枚举、数据库、RPC 接口等等任意来源

特点

  • 不限制关联查询方式,需要关联的数据可以是任意来源
  • 两级缓存支持,可自由选择使用的缓存
  • 执行效率高,对性能影响极小
  • 支持多条件关联和常量条件关联

快速开始

下面演示如何使用 EasyRelation 进行自动关联数据

假设有订单类(Order)和用户类(User),订单中保存了用户名,需要关联查询用户昵称。

  • Order
@Data
public class Order {

private String orderId;

private String username;

private String nickName;

}
  • User
@Data
public class User {
private String username;
private String nickName;
}

添加依赖

<properties>
<easy-relation.version>最新版本</easy-relation.version>
</properties>
<dependencies>
<dependency>
<groupId>cn.easii</groupId>
<artifactId>easy-relation-spring-boot-starter</artifactId>
<version>${easy-relation.version}</version>
</dependency>
</dependencies>

定义用户数据数据提供者

这里需要定义一个类,实现 DataProvideService 接口,在其中定义获取用户信息的接口,并添加 @DataProvider 注解。

@Component
public class UserInfoDataProvider implements DataProvideService {

@DataProvider(RelationIdentifiers.getUserByUsername)
public User getUserByUsername(UserQueryReq req) {
if ("admin".equals(req.getUsername())) {
final User user = new User();
user.setUsername("admin");
user.setNickName("管理员");
return user;
}
return null;
}

}

这里的 UserQueryReq 为用户信息查询入参,定义如下:

@Data
@AutoMapMapper
public class UserQueryReq {

private String username;

private Long userId;

private Boolean isDeleted;

}

测试

@SpringBootTest
class InjectRelationTest {

@Autowired
private InjectRelation injectRelation;

@Test
void quickStart() {
Order order = getOrder("2f453910375641648ab3a2fc6e3328ef");
injectRelation.injectRelation(order);
System.out.println(order);// Order(orderId=2f453910375641648ab3a2fc6e3328ef, username=admin, nickName=管理员)
Assert.equals(order.getNickName(), "管理员");
}

private Order getOrder(String orderId) {
Order order = new Order();
order.setOrderId(orderId);
order.setUsername("admin");
return order;
}

}

缓存支持

EasyRelation 中共设计有两级缓存,参考了 Mybatis 中的设计,在进行数据关联时,会依次经过 一级缓存 --> 二级缓存 ---> 数据提供源,从而提高数据获取的效率。

这里简单了解一下一级缓存与二级缓存:

  • 一级缓存:单次数据关联操作内的缓存,缓存的数据只在这个关联过程内有效,一级缓存根据一定规则,会自动开启。

这里的单次数据关联操作指的是调用一次 injectRelation 方法内的执行流程。

  • 二级缓存:全局缓存,比如使用 Redis 作为缓存,二级缓存需要手动开启。

详细可以参考缓存 | EasyRelation (easii.cn)

性能损耗

测试运行环境:

  • CPU:Intel i5 10400
  • 内存:32 GB
  • JDK:17

执行一百万次,多种情况下,消耗在 185 ~ 620 毫秒之间,具体可以查看性能 | EasyRelation (easii.cn)

项目地址

  • Gitee
  • Github

官方文档

主页 | EasyRelation (easii.cn)


相關推薦

2023-06-14

EasyRelation 1.1.1 发布,新版本更新日志: 更新 MapStructPlus 版本 1.2.1 --> 1.2.5 添加自动关联数据功能 当想要对一个方法的结果自动关联相关数据时,可以在方法上面增加 @AutoRelation 注解, 框架会对其方法返回的结

2022-11-03

片、网易云) V5.1.0版本更新 2022年11月02日ModStartCMS发布v5.1.0版本,增加了以下19个特性: [新功能] 安装向导根路径配置错误检测提醒 [新功能] Grid处理关联模型功能增强 [新功能] JS弹窗组件回调新增参数 [新功能]

2023-04-05

片、网易云) V6.1.0版本更新 2023年04月04日ModStartCMS发布v6.1.0版本,增加了以下25个特性: [新功能] 基本设置支持其他备案信息 [新功能] 后台待审核链接在新标签页打开 [新功能] GridFilter增加数字和文本范围查询 [

2023-12-14

框架。 这是基于 Hyper 1.0-rc4 的最后一个版本,不久就会发布基于 Hyper 1.0 正式版本的下一个版本。 特色: - 有着比 axum 等更丰富的功能,但却更易于上手。 - 跟 go 等其他语言框架更接近,比 Rust 语言各个 Web 框架更少的类型

2023-12-15

的简单好用且功能强大的 Web 后端框架。 虽然昨天刚刚发布 0.61, 今天基于 Hyper 1.0 的全新版本就好了。 我们不跟 Axum 比爹爹,我们只跟它比功能,比易用性。 如果你不曾爱上用 Rust 开发 Web 后端,那只是你没有遇到 Salvo. 如果

2023-09-12

定义、模型字段维护、关联设置,支持导入已有表,支持发布动态建表、动态更新表 模型ER图:支持显示模型间关联ER图,支持下钻查看 支持生成后端代码 支持生成前端代码,导入导出功能代码(订阅用户) 体验

2023-07-26

程框架 ioGame 开发的,也是 ioGame 的最佳实践。ioGame 正式发布至中央仓库已经一周年了,经历了近 50 个版本的高速迭代。期间得到了众多开发者的认可,并且这些数据都是可查的,统计数据来源于语雀后台,这些数据都是真实的

2022-12-25

Meson 1.0 已正式发布,此版本带来如下增强改动: 支持带有“prefix”关键字参数的数组, 从 cpp/objcpp 警告级别 1 中删除一些标志 各种开发环境改进 支持字符串上的“in”运算符 “warning-level= everything”选项 Rust 模块被

2023-03-01

,对分库分表透明; ORM Bee Sharding 分库分表就是那么简单,对开发透明,不影响业务,简单易用,文件小,性能好;支持 Mongodb,支持 JDBC,还支持 Android 和 Harmony;可以同时使用多种不同类型的数据库。 Bee,互联网

2023-02-17

,对分库分表透明; ORM Bee Sharding 分库分表就是那么简单,对开发透明,不影响业务,简单易用,文件小,性能好;支持 Mongodb,支持 JDBC,还支持 Android 和 Harmony;可以同时使用多种不同类型的数据库。 Bee,互联网

2022-06-22

历经一年多的开发,mojo.js 终于发布了首个主要版本 1.0。 mojo.js 是 Node.js 实时 Web 框架,可将它视作采用 TypeScript 重写的 Mojolicious(Mojolicious 是 Perl 开发的 Web 框架)。mojo.js 使用了所有最新的 JavaScript 特性,专为聚焦超媒体

2023-02-22

,对分库分表透明; ORM Bee Sharding 分库分表就是那么简单,对开发透明,不影响业务,简单易用,文件小,性能好;支持 Mongodb,支持 JDBC,还支持 Android 和 Harmony;可以同时使用多种不同类型的数据库。 Bee,互联网

2023-02-14

Bee就是简单,但性能还很快; 开发也很快, 让你节省更多的时间,去约会^_^ 使用MongoDB像使用MySQL一样容易; ORM Bee Sharding 分库分表就是那么简单,对开发透明,不影响业务,简单易用,文件小,性能好;支持 Mongodb,支持 JDBC

2023-02-07

ORM Bee Sharding 分库分表就是那么简单, 对开发透明,不影响业务,简单易用,文件小,性能好;支持 Mongodb,支持 JDBC,还支持 Android 和 Harmony。 Bee,互联网新时代的 Java ORM 工具,更快、更简单、更自动,开发速度快,