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;
我要执行的操作如下: 我有一些复杂的 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;