为什么在JAVA中使用NamedParameterJdbcTemplate时'CURRENT_DATE'不能作为参数?

Why can 'CURRENT_DATE' not as a parameter when using NamedParameterJdbcTemplate in JAVA?

在mysql中,我使用这个sql并且运行良好。

select * from student where CREATE_TIME>=DATE_SUB(curdate(),INTERVAL 24 HOUR)

现在我想使用日期作为参数,所以我使用NamedParameterJdbcTemplate,如果我传递像'2020-05-30'这样的日期,它也会在我传递时运行well.But 'CURRENT_DATE' 或 'curdate()',它无法搜索任何 result.How 来更改我的代码?

 NamedParameterJdbcTemplate nameJdbc = new NamedParameterJdbcTemplate(jdbcTemplate);
    Map<String,Object> paramMap = new HashMap<String, Object>();
    //dateStr when '2020-05-30' is ok,'CURRENT_DATE' is not ok;     
   paramMap.put("dateStr",dateStr); 
    String sql = "SELECT *"
            + " FROM student where CREATE_TIME>=DATE_SUB(:dateStr,INTERVAL 24 HOUR)" ;
    return   nameJdbc.query(sql,paramMap,
            new BeanPropertyRowMapper<>(Student.class));

它不起作用,因为 CURRENT_DATE 或等效函数调用作为字符串参数而不是关键字插入。

您可以做的一件事是,如果参数为空,则将 SQL 字符串中的 :dateStr 手动替换为 CURRENT_DATE,否则将其值放入参数映射中。

更好的选择是只使用 LocalDate.now().toString() 设置日期字符串,如果参数为空,并且始终在 SQL 语句中设置它。