【问题标题】:Spring data native query with variable quantity of parameters具有可变参数数量的 Spring 数据本机查询
【发布时间】:2022-01-06 06:20:17
【问题描述】:

我有一个复杂的 SQL 查询,它可能在 where 部分有不同数量的参数。所以,查询sql应该手动构造。结果,我得到了包含 45 个字段的对象数组,每个字段我都必须进行大小写、转换等。我不能使用结果集映射,因为它需要一个稳定的 SQL,我应该在注释中指定。所以问题是有没有办法返回 pojo 或者至少使用列名映射而不是通过索引访问所有对象?

String sql = "select col1 as column1, ...., columnN as columnN from table where col1=2 ";

if(param1!=null){
   sql+=" AND param1="+param1;
}

....

Query q = manager.createNativeQuery(sql);

//getting list on object arrays of 45 fields, would like to have POJO or at least map
List list = q.getResultList();

【问题讨论】:

标签: java spring hibernate spring-data


【解决方案1】:

如果您从中检索数据的表映射到 POJO,您可以通过执行以下操作手动指定 POJO:

Query query = em.createNativeQuery("SELECT * FROM table", MyPojoMappingTable.class);
@SuppressWarnings("unchecked")
List<MyPojoMappingTable> items = (List<MyPojoMappingTable>) query.getResultList();

相反,如果表没有映射到任何 POJO 并且您在 Spring 中,则可以使用 jdbcTemplate 至少获取一个映射:

@Autowired
NamedParameterJdbcTemplate jdbcTemplate;

String query;
Map<String, Object> queryParameters;

List<Map<String, Object>> rows = jdbcTemplate.queryForList(
    query,
    queryParameters
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-08
    • 2012-06-03
    • 2016-08-19
    • 2019-10-09
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多