Spring Boot:对非实体类执行SQL

Dis*_*ame 1 spring spring-data spring-data-jpa spring-boot

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

因此,有什么办法可以调整非实体的存储库,或者有什么其他方法可以使我执行SQL并将结果自动解析为对象。

Ore*_*est 6

基本上就像@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;
    }
}
Run Code Online (Sandbox Code Playgroud)

同样在Spring Boot中,您不需要执行任何操作,只需将您的内容添加jdbcTemplate到Dao类中即可:

@Autowired
private JdbcTemplate jdbcTemplate;
Run Code Online (Sandbox Code Playgroud)