gpt4 book ai didi

java - 有没有办法在 Jooq 中通过示例查询?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:40:51 26 4
gpt4 key购买 nike

我有一个由 Jooq 生成的 PersonPojoPersonRecord

现在我想做这样的事情:

Person p = new PersonPojo()
p.setId(10);
create.selectFrom(Tables.PERSON).whereLike(p).fetch();

当前版本 (3.7) 可以吗?

最佳答案

jOOQ 3.8+ 解决方案

Query By Example (QBE)在 jOOQ 3.8 中使用 #4735 实现了支持.你可以这样写:

Person p = new PersonPojo();
p.setId(10);

PersonRecord record = new PersonRecord();
record.from(p); // Reuse pre-existing reflection functionality here.

create.selectFrom(Tables.PERSON).where(DSL.condition(record)).fetch();

更多详情请引用Javadoc :

jOOQ 3.7以下解决方案

在旧的 jOOQ 版本中,您可以自己实现 QBE:

Person p = new PersonPojo();
p.setId(10);

PersonRecord record = new PersonRecord();
record.from(p); // Reuse pre-existing reflection functionality here.

Condition condition = DSL.trueCondition();
for (Field<?> field : record.fields())
if (record.getValue(field) != null)
condition = condition.and(((Field) field).eq(record.getValue(field)));

create.selectFrom(Tables.PERSON).where(condition).fetch();

或者,使用 Java 8:

create.selectFrom(Tables.PERSON)
.where(Stream.of(record.fields())
.filter(f -> record.getValue(f) != null)
.reduce(
DSL.trueCondition(),
(c, f) -> c.and(((Field) f).eq(record.getValue(f))),
(c1, c2) -> c1.and(c2)
))
.fetch();

关于java - 有没有办法在 Jooq 中通过示例查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33667182/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com