2016-02-04 82 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時谷歌搜索 –

相關問題