在 spring 的 namedParameterJdbcTemplate 中动态选择列名

Choose column name dynamically in namedParameterJdbcTemplate in spring

嗨,这个问题很简单

我们都知道这个查询有效

String query = SELECT * FROM DATABASE_LOCKER WHERE LAST_HOUR = :last_hour

        MapSqlParameterSource parameters = new MapSqlParameterSource();
        parameters.addValue("last_hour","2");


getNamedParameterJdbcTemplate().update(
                    QueryConstants.query, parameters);

但这有可能吗??那就是我需要动态地给一个table的列名

String query = SELECT * FROM DATABASE_LOCKER WHERE :last_hour = 1

    MapSqlParameterSource parameters = new MapSqlParameterSource();
    parameters.addValue("last_hour","LAST_HOUR");


getNamedParameterJdbcTemplate().update(
                QueryConstants.query, parameters);

你为什么不像下面这样使用它:

if(yourCondition){
columnName = "ABCD";
}else{
columnName = "A1B2C3";
}

在代码中,您可以动态使用列名,例如:

   public/ private Object / void someDaoMethod(String columnName, String value){
    String query = "SELECT * FROM DATABASE_LOCKER WHERE "+columnName+"="+value";
    .....

    }

如果您使用的是属性文件,我本可以建议您这样...

queryToGetFromDabaseLocker = SELECT * FROM DATABASE_LOCKER WHERE {0} = {1}

在代码中,您可以简单地使用 like :

像这样读取 属性 文件值:

Properties properties = new Properties();
try {
  properties.load(new FileInputStream("path/filename"));
} catch (IOException e) {
  ...
}

迭代为:

String query = "";
String formatteQuery = "";
    for(String key : properties.stringPropertyNames()) {
       if(key.equals("queryToGetFromDabaseLocker")){
      query = properties.getProperty(key);
      formatteQuery = MessageFormat.format(query , "YourColumnName", "YourValue");
       }
    }