首页 > 解决方案 > JdbcTemplate “查询”在 Spring 中已弃用。动态参数的解决方法是什么?

问题描述

JbdcTemplate - 使用动态 SQL 查询的 PreparedStatements 正是我所做的,但是 jdbctemplate.query 已被贬低,您不能将其传递给对象,而是应该使用 varargs 方法。 JdbcTemplate "queryForObject" 和 "query" 在 Spring 中已弃用。应该用什么代替?

但就动态查询而言,我有未知数量的参数,所以在这种情况下我应该怎么做

仅供参考,代码正在运行,它只是被弃用了。

private JdbcTemplate jdbcTemplate;

List<QueryResults> jdbcQuery(QueryParams queryParams) {
    /* base query */
    StringBuilder sqlQuery = new StringBuilder("Select * from table where 1=1 ");
    /* stores the dynamic preparedStatement arguments */
    List<String> queryArgs = new ArrayList<>();

    if(someCondition){
       sqlQuery.append("And column1 = ? ");
       queryArgs.add(queryParams.value1);
    }
    if(someCondition2){
       sqlQuery.append("And column2 = ? ");
       queryArgs.add(queryParams.value2);
    }
    if(someCondition3){
       sqlQuery.append("And column3 = ? ");
        queryArgs.add(queryParams.value3);
    }
    //etc...

    /* this is the part I used from the above stackoverflow question */
    Object[] preparedStatementArgs = new Object[queryArgs.size()];
    for(int i = 0; i < preparedStatementArgs.length; i++){
        preparedStatementArgs[i] = queryArgs.get(i);
    }

    /* Lastly, execute the query */
    return this.jdbcTemplate.query(sqlQuery.toString(),
    preparedStatementArgs, (rs, rowNum) -> {

        QueryResults result = new QueryResults();
        /* store the results of the query... */
    });
}

这就是代码现在的样子

标签: javajdbctemplate

解决方案


推荐阅读