2.6.1.8 Projection
Spring Data JPA的查询方法一般返回的是聚合根的一个多或多个实例。我们可以使用Projection,通过聚合根的属性来定制查询返回。
我们可以使用接口来定制返回值
public interface PersonProjectionInterface {
String getName(); //1
Address getAddress(); //2
@Value("#{target.name + ' s age is' + target.age}") //3
String getAgeDesc();
default String getCityDesc(){
//4
return getName() + " lives in " + getAddress().getCity();
}
@Value("#{@personProjectionHelper.getInfo(target)}") //5
String getInfo();
@Value("#{args[0] + ' ' + target.name + ' !'}") //6
String getHello(String greeting);
}
-
可以直接设置聚合根的属性在返回里;
-
设置聚合根的属性对象在返回里;
-
可以使用
@Value
注解计算新的值,target
代表聚合根的值; -
可以使用
default
方法来定义运算逻辑; -
可调用外部Bean来运算;
@Component public class PersonProjectionHelper { public String getInfo(Person person){ return person.toString(); } }
-
可获取方法参数来参与运算。
我们在Repository的返回值中使用上面的接口: