2016-02-04 80 views
0

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

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

+2

这就是JdbcTemplate的用途。它有执行原生SQL语句的方法。 – dunni

回答

4

所以基本上为@dunni说,你可以使用一些JdbcTemplate的,之后写自己的映射到SQL结果转换为Java对象,例如:

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; 
    } 
} 

此外,在春季启动时,您不需要做只需将jdbcTemplate添加到您的Dao类中即可:

@Autowired 
private JdbcTemplate jdbcTemplate; 
+0

谢谢,那只是我一直在寻找,似乎我只是无法使用正确的searchterms时谷歌搜索 –

相关问题