前端传来需要查询的字段名,然后动态构建Predicate数据做查询
List<Predicate> predicates = new ArrayList<>();
QXxx qX=QXxx.qXxx;
StringPath path = Expressions.stringPath(qX,"someColParam");
predicates.add(path.like("%XXX%"));
...
predicates.add(XXX)
predicates.add(XXX)
...
List<X> result= jpaQueryFactory
.select(qX)
.from(qX)
.where(
predicates.toArray(new Predicate[0])
)
.fetch();
即可
someColParam
就是前端传来的字段名
在一些大数据运算输出的项目里会遇到这种场景,因为需要定义公共字段和模型记录。当然,不限于此
之前想用
new StringPath(qX,"someColParam")
来生成expression,但是高版本的QueryDsl已经将这些Path子类的构造函数改为了protected
,所以无法直接定义XXPath,而是要使用Expressions
或者ExpressionUtils
来构建Predicate要用的expression,这里猜测QueryDsl团队这么做的原因应该是为了统一接口,提升框架优雅罢?
PS: Leader显出极高兴的样子,将两个指头的长指甲敲着屏幕,转头对我说道,“对呀对呀!……Predicate有四样写法,你知道么?” 我愈不耐烦了,努着嘴关了IDEA。Leader刚用指甲扣了扣键盘,想在方法上码来,见我毫不热心,便又叹一口气,显出极惋惜的样子。
冶心·练体·得技