假设我们有一个表汽车
和零件
。要获取所有汽车及其零件,我们使用以下查询:
@Transactional
public List<ReadCarDto> getAllCars() {
return getDslContext().select(
CAR.ID,
CAR.NAME,
CAR.DESCRIPTION,
multiset(
selectDistinct(
PARTS.ID,
PARTS.NAME,
PARTS.TYPE,
PARTS.DESCRIPTION
).from(PARTS).where(PARTS.CAR_ID.eq(CAR.ID))
).convertFrom(record -> record.map(record1 -> new ReadPartDto(
record1.value1(),
record1.value2(),
record1.value3(),
record1.value4()
)))
).from(CAR).fetch(record -> new ReadCarDto(
record.value1(),
record.value2(),
record.value3(),
record.value4()
));
}
问:我总是想取整车和零件排。有没有办法重用我现有的私有RecordMapper
看起来
selectDistinct
方法只支持1-22个字段和select()。from(CAR)
不提供multiset
方法。
旁注:我不想使用反射转换。
你的问题让我想起了这个。您可能希望使用嵌套行()表达式来生成嵌套记录
。比如:
return getDslContext()
.select(
row(
CAR.ID,
CAR.NAME,
CAR.DESCRIPTION,
...
).mapping(carMapper),
multiset(...)
)
未来的jOOQ版本将允许您在投影中直接使用CAR
作为嵌套行,请参阅https://github.com/jOOQ/jOOQ/issues/4727.截至Jooq3.16,这还不可用。
我尝试在项目中使用jooq,但出于性能原因,我希望缓存查询。在性能考虑部分的用户手册中,提到了查询缓存,但没有关于如何实现的示例。因此,我尝试按如下方式缓存查询(例如SimpleSelectConditionStep): 我的软件是一个多线程的web应用程序,但可以保证两个不同的线程不能同时使用相同的查询(池在再次放入池之前不会返回相同的查询)。 我知道比工厂不是一个线程安全的对象,但我想知道在代
在Jooq中运行上述查询的最佳方式是什么?我知道我可以用普通SQL编写查询,但我想看看是否有更好的方法来实现这一点。
我如何写问题。*在jooq中而不是指定所有实体vaiables
我需要从一个非常大的表中选择一个“页”的数据。由于WHERE子句和需要分页到相当大的偏移量,我使用一个子查询来获取ID。只有在末尾放置时,此策略才有效。这导致(我认为)到数据库的额外往返。有什么方法可以避免额外的? 附言。我这样做的原因是由于orderBy/offset/limit用于大偏移量(我选择的列之一由于是blob类型,不适合添加到索引中,所以我不能创建覆盖索引)。
我正试图用jooq编写这个查询 我尝试了几件事,但没有成功。到目前为止,我只得到 如何将num列添加到结果中?感谢您的帮助。
问题内容: 我现在将Pure SQL转换为jOOQ 我必须在jOOQ中编写此代码,我们该如何编写? 问题答案: 实现您所请求内容的最直接的方法是使用: 另外,您可以显式表达该功能: 还有另一种方法来获取任意表达式,这可以帮助您避免在上述方法中指定结果列索引和类型。它使用: 但是请注意,这会呈现如下嵌套选择: