Spring Like子句

Chr*_*ris 12 java spring jdbc

我正在尝试使用MapSqlParameterSource来使用Like子句创建查询.

代码是这样的.包含它的函数接收nameParam:

String namecount = "SELECT count(*) FROM People WHERE LOWER(NAME) LIKE :pname ";

String finalName= "'%" +nameParam.toLowerCase().trim() + "%'";

MapSqlParameterSource namedParams= new MapSqlParameterSource();

namedParams.addValue("pname", finalName);

int count= this.namedParamJdbcTemplate.queryForInt(namecount, namedParams);
Run Code Online (Sandbox Code Playgroud)

这不能正常工作,当我应该接收数千时,给我介于0-10结果之间.我基本上希望最终查询看起来像:

SELECT count(*) FROM People WHERE LOWER(NAME) LIKE '%name%'
Run Code Online (Sandbox Code Playgroud)

但这显然没有发生.任何帮助,将不胜感激.

编辑:

我也尝试将'%'放在SQL中,比如

 String finalName= nameParam.toLowerCase().trim();

 String namecount = "SELECT count(*) FROM People WHERE LOWER(NAME) LIKE '%:pname%' "
Run Code Online (Sandbox Code Playgroud)

;

但这也不起作用.

Jef*_*eff 26

您不希望在finalName字符串周围加引号.使用命名参数,您无需指定它们.这应该工作:

String namecount = "SELECT count(*) FROM People WHERE LOWER(NAME) LIKE :pname ";
String finalName= "%" + nameParam.toLowerCase().trim() + "%";

MapSqlParameterSource namedParams= new MapSqlParameterSource();
namedParams.addValue("pname", finalName);

int count= this.namedParamJdbcTemplate.queryForInt(namecount, namedParams);
Run Code Online (Sandbox Code Playgroud)