EasyRelation自动关联数据框架

联合创作 · 2023-10-01 07:20

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

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

链接地址

特点

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

快速开始

安装依赖

  • maven
<dependency>
    <groupId>cn.easii</groupId>
    <artifactId>easy-relation-spring-boot-starter</artifactId>
    <version>${easy-relation.version}</version>
</dependency>
 

定义对象

假设有一个订单模型(Order),其只保存了用户名,需要关联查询昵称:

@Data
public class Order {

    private String orderId;

    private String username;

    @Relation(handler = RelationIdentifiers.getUserByUsername, targetField = "nickName",
        condition = {@Condition(field = "username")})
    private String nickName;

}
 

如上定义中,在需要关联查询的字段,添加@Relation注解,指定关联关系,这里的 targetField 表示当前字段需要查询结果中的指定 nickName 属性。

定义数据提供者

定义一个类,继承 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;
    }

}
 

使用

@SpringBootTest
class InjectRelationTest {

    @Autowired
    private InjectRelation injectRelation;

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

}
 

总结

使用 EasyRelation 主要有三步:

  1. 在类结构中配置关联关系
  2. 定义关联查询数据源
  3. 获取 InjectRelation 实例,调用其 injectRelation 方法,自动注入关联数据
浏览 3
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报