数据关联

linpeilie大约 1 分钟

InjectRelation

当配置好关联关系和数据提供者时,就可以通过 InjectRelation 提供的方法,在需要的时候进行数据关联了。

当需要数据关联时,需要先获取 InjectRelation 实例(例如,可以用 Spring 注入的方式),再调用相应的方法来进行数据关联。

其内部提供了两个方法:

  • public <T> void injectRelation(T t, String... relationFields)
  • public <T> void injectRelation(List<T> list, String... relationFields)

这两个方法分别针对单个对象和集合来进行关联。

这里需要注意,在处理集合时,会默认开启一级缓存(参考缓存),所以当集合时,建议调用第二个方法。

第二个参数是指定要关联的属性名称,当不指定时,默认关联配置的所有需要关联的属性。

示例:

class InjectRelationTest {

    @Autowired
    private InjectRelation injectRelation;

    private User initUser() {
        User user = new User();
        user.setUsername("admin");
        user.setNickName("管理员");
        user.setCreateUsername("admin");
        return user;
    }

    @Test
    void injectRelation() {
        final User user = initUser();
        injectRelation.injectRelation(user);
        System.out.println(user);
    }

    @Test
    public void injectSingleField() {
        final User user = initUser();
        injectRelation.injectRelation(user, "createNickName");
        System.out.println(user);
        Assert.isNull(user.getRole());
        Assert.isNull(user.getPermissions());
    }

    @Test
    public void injectList() {
        List<User> userList = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            userList.add(initUser());
        }
        injectRelation.injectRelation(userList);
        for (User user : userList) {
            Assert.notNull(user.getRole());
            Assert.notNull(user.getPermissions());
            Assert.notNull(user.getCreateNickName());
        }
    }

    @Test
    public void injectListSingleField() {
        List<User> userList = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            userList.add(initUser());
        }
        injectRelation.injectRelation(userList, "createNickName");
        for (User user : userList) {
            Assert.isNull(user.getRole());
            Assert.isNull(user.getPermissions());
            Assert.notNull(user.getCreateNickName());
        }
    }

}