如何解决是否可以在 Spring Data JDBC 中返回结合多个聚合的自定义 Java 对象?
我有多个聚合类,例如 Request、Scribe、Candidate 和 Exam。
示例架构:
请求(id、scribe_id、Candidate_id、exam_id、status)
抄写员(id,姓名)
候选人(id,姓名)
考试(id、姓名、日程)
如您所见,Request
表包含对 Scribe、Candidate 和 Exam 表的引用。
对于其中一项要求,我需要根据条件返回所有请求,包括抄写员、考生和考试的所有相应详细信息。
SELECT r.id,r.status,c.name,s.name,e.schedule,e.name
FROM request r
JOIN candidate c ON r.candidate=c.id
JOIN scribe s ON r.scribe=s.id
JOIN exam e ON r.exam=e.id
WHERE <some-condition>
现在,有没有办法将这个查询的结果直接映射到自定义 Java 对象并在 Spring Data JDBC 中返回相同的内容? 我相信另一种选择是使用 Spring JDBC 模板。 好奇,Spring Data JDBC 有什么开箱即用的支持吗?
谢谢。
解决方法
我可以通过设置 rowMapperClass
注释的 org.springframework.data.jdbc.repository.query.Query
值来返回自定义 Java 对象。为此需要为自定义 Java 对象定义 RowMapper。
更改看起来类似于以下内容:
public class RequestResourceRowMapper implements RowMapper<RequestResource> {
@Override
public RequestResource mapRow(ResultSet resultSet,int rowNumber) throws SQLException { ... }
}
在存储库类中,需要设置 rowMapper
值。
@Query(value = """
SELECT r.id,r.status,c.name,s.name,e.schedule,e.name
FROM request r
JOIN candidate c ON r.candidate=c.id
JOIN scribe s ON r.scribe=s.id
JOIN exam e ON r.exam=e.id
WHERE <some-condition>
""",rowMapperClass = RequestResourceRowMapper.class)
List<RequestResource> searchRequestResources(...);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。