Open ShawnaVayne opened 1 week ago
实际上,在索引命中与使用效率方面,where a = 'a' and b = 'b'
与 where b = 'b' and a = 'a'
没有任何区别。
实际上,在索引命中与使用效率方面,
where a = 'a' and b = 'b'
与where b = 'b' and a = 'a'
没有任何区别。
感谢回复,是我描述不够严谨,这里我使用的数据库是Clickhouse,a是我的PARTITION分区键,在查询的时候我希望a能够在执行时在最前面。
当前版本,默认不支持,不过可以通过自定义 ParamResolver
组件,并配合 LinkedHashMap
来实现:
var params = MapUtils.builder(new LinkedHashMap<>())
// 添加参数...
.build();
// 执行查询
自定义 ParamResolver
思路:继承 DefaultParamResolver
, 重写 resolveParamsGroup(Collection<FieldMeta> fieldMetas, Map<String, Object> paraMap)
方法。
当前版本,默认不支持,不过可以通过自定义
ParamResolver
组件,并配合LinkedHashMap
来实现:var params = MapUtils.builder(new LinkedHashMap<>()) // 添加参数... .build(); // 执行查询
自定义
ParamResolver
思路:继承DefaultParamResolver
, 重写resolveParamsGroup(Collection<FieldMeta> fieldMetas, Map<String, Object> paraMap)
方法。 感谢提供解决方案,好人一生平安~
下个版本将优化为按 检索实体类 中字段声明的顺序生成条件,例如:
public class UserVO {
private String name;
private int age;
}
当 name
与 age
都有参数时,将生成 where name = 'xxx' and age = x
这样,是否可以满足你的需求?
下个版本将优化为按 检索实体类 中字段声明的顺序生成条件,例如:
public class UserVO { private String name; private int age; }
当
name
与age
都有参数时,将生成where name = 'xxx' and age = x
这样,是否可以满足你的需求 是可以满足的,会有一个疑问:继承父类的话,父类的字段是更靠前还是更靠后呢?
父类的字段是更靠后
比如:
MapBuilder mapBuilder = MapUtils.builder();
mapBuilder.field(T::getA, "A").op(FieldOps.Equal);
mapBuilder.field(T::getB, "B").op(FieldOps.Equal);
生成的sql应该就是:where a = 'a' and b = 'b'