快速开始
大约 2 分钟介绍快速开始
下面演示如何使用 EasyRelation 进行自动关联数据
假设有订单类(Order
)和用户类(User
),订单中保存了用户名,需要关联查询用户昵称。
@Data
public class Order {
private String orderId;
private String username;
private String nickName;
}
@Data
public class User {
private String username;
private String nickName;
}
SpringBoot
添加依赖
<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>
配置关联关系
在 Order
中指定其 nickName
属性需要关联查询而来,通过当前类中的 username
属性关联, 这里假设查询结果是一个对象,则获取对象中的 nickName
属性:
@Data
public class Order {
// ......
@Relation(provider = RelationIdentifiers.getUserByUsername, targetField = "nickName",
condition = {@Condition(field = "username")})
private String 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;
}
}
这里的 UserQueryReq
为用户信息查询入参,定义如下:
@Data
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;
}
}
非 SpringBoot
添加依赖
<properties>
<easy-relation.version>最新版本</easy-relation.version>
</properties>
<dependencies>
<dependency>
<groupId>cn.easii</groupId>
<artifactId>easy-relation-core</artifactId>
<version>${easy-relation.version}</version>
</dependency>
</dependencies>
配置关联关系
定义用户数据数据提供者
测试
public class QuickStart {
private InjectRelation injectRelation;
@BeforeEach
public void before() {
// 注册用户信息获取接口
DataProviderRepository.registerHandler(new UserInfoDataProvider());
injectRelation = new InjectRelation();
}
@Test
public void quickStart() {
// 获取 order 信息
final Order order = getOrder("eb35e18caa552284b39d427c1e06f9f7");
injectRelation.injectRelation(order);
System.out.println(order); // Order(orderId=eb35e18caa552284b39d427c1e06f9f7, 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 时,基本分为三步:
- 在对象中使用
@Relation
定义关联关系 - 定义关联数据获取接口,在方法上添加
@DataProvider
,非 SpringBoot 环境下,还需要手动注入当前接口的实例到DataProviderRepository
- 获取
InjectRelation
实例,调用injectRelation
方法,自动实现关联数据注入