我正在尝试使用 @query 的 spring data jdbc,但遇到了一个问题:如果我有一个查询连接 2 个这样的表:
@Query("select a.*, b.* from master a, detail b where b.master_id=a.id and a.id=:id")
我如何得到回应?官方的Spring Data JDBC、References 和 Aggregates没有给出任何提示。有什么建议吗?
我正在尝试使用 @query 的 spring data jdbc,但遇到了一个问题:如果我有一个查询连接 2 个这样的表:
@Query("select a.*, b.* from master a, detail b where b.master_id=a.id and a.id=:id")
我如何得到回应?官方的Spring Data JDBC、References 和 Aggregates没有给出任何提示。有什么建议吗?
您有多种选择:
使用默认值RowMapper
使用具有您选择的所有字段的属性的类(或该类的集合)作为返回类型。这将为每一行返回一个元素。
由于您指的是这两个表,master
并且detail
在这种情况下您可能不希望这样。
使用自定义RowMapper
@Query
注释允许您指定您自己的rowMapperClass
将被实例化并NamedParameterJdbcTemplate
与您的查询一起传递给 a的注释。
同样,这将导致每行选择一个结果元素,因此可能不是您想要的。
使用自定义ResultSetExtractor
这可以在@Query
注释中再次指定。并允许您以任意方式构造结果。有关更多详细信息,请参阅文档ResultSetExtractor
。
备注:如果您使用 a从查询结果的多行中ResultSetExtractor
创建Master
具有多个Detail
实例的单个实例,请确保添加ORDER BY master.id
. 否则,行的顺序可能是所需的,但实际上并不能保证。