如何在JDBI中使用SQL对象查询进行排序?
我想做的事情如下:
@SqlQuery(
"SELECT * FROM users " +
"WHERE something = :something " +
"ORDER BY :orderBy :orderDir"
)
List<User> getUsers(
@Bind("something") Integer something
, @BindOrderBy("orderBy") String orderBy
, @BindOrderDir("orderDir") String orderDir
);
Run Code Online (Sandbox Code Playgroud)
要么
@SqlQuery(
"SELECT * FROM users " +
"WHERE something = :something " +
"ORDER BY :orderBy :orderDir"
)
List<User> getUsers(
@Bind("something") Integer something
, @Bind("orderBy") OrderBy orderBy
, @Bind("orderDir") OrderDir orderDir
);
Run Code Online (Sandbox Code Playgroud) 假设我们有一个具有以下属性的对象:
public class MyObject {
private String attr1;
private Integer attr2;
//...
public String getAttr1() {
return this.attr1;
}
public Integer getAttr2() {
return this.attr2;
}
}
Run Code Online (Sandbox Code Playgroud)
mylist根据其属性对此对象的列表进行排序的一种方法attr1是:
mylist.sort(Comparator.comparing(MyObject::getAttr1));
Run Code Online (Sandbox Code Playgroud)
是否可以以动态方式在方法中使用此代码,并使用getAttr1根据其名称返回对象属性的getter的方法替换该部分?就像是:
public void sortListByAttr(List<MyObject> list, String attr) {
list.sort(Comparator.comparing(MyObject::getGetterByAttr(attr)));
}
Run Code Online (Sandbox Code Playgroud)
该MyObject::getGetterByAttr(attr)部分不编译,我写的只是作为一个例子来解释我的想法
我尝试使用以下代码实现一个方法new PropertyDescriptor(attr, MyObject.class).getReadMethod().invoke(new MyObject())但是仍然无法使用该方法中的参数调用comparing方法