Spring 引导:对非实体 类 执行 SQL

Spring Boot: Execute SQL for non-entity Classes

我要执行的操作如下: 我有一些复杂的 SQL(使用 SUM(distance) distanceSum 作为返回列的标识符)returns 一些值应该解析为 class(仅包含这些值所需的值)列)。 但是,我只需要内存中的结果而不是实体。 我已经尝试创建一个存储库来使用带有 native = true 的 @Query 注释来执行 SQL。但是,存储库无法自动装配,可能是因为存储库仅适用于实体。

那么有没有办法为非实体调整存储库,或者有没有存储库以外的方法可以让我执行 SQL 并将结果自动解析为对象。

基本上正如@dunni 所说,您可以将 JdbcTemplate 与您自己的映射器一起使用,将 SQL 结果转换为 Java POJO:

public CustomResult getCustomResult(){
    final String complexSql = "SELECT SUM(distance) as distanceSum....";
    final CustomResult customResult = (CustomResult) jdbcTemplate.queryForObject(complexSql, new CustomResultRowMapper());

    return customResult;
}

public class CustomResultRowMapper implements RowMapper {
    public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
        CustomResult customResult = new CustomResult();
        customResult.setDistanceSum(rs.getInt("distanceSum"));
        ...
        return customResult;
    }
}

此外,在 Spring 引导中,您不需要做任何事情,只需将 jdbcTemplate 添加到您的 Dao class:

@Autowired
private JdbcTemplate jdbcTemplate;