关于JdbcTemplate的模糊查询
今天在做学生管理系统的复杂条件查询的时候遇见的小难题
在使用Template使用like关键字模糊查询的时候一直报语法错误,刚开始的代码大概是这样的
public int findTotaCount(Map<String, String[]> condition) {
// 定义模板初始化
String sql="select count(*) from user where 1 = 1 ";
StringBuilder sb=new StringBuilder(sql);
// 2.遍历map
Set<String> keySet = condition.keySet();
// 定义一个参数的集合
List<Object> params =new ArrayList<Object>();
for (String key : keySet) {
if("currentPage".equals(key)||"rows".equals(key)){
continue;
}
// 获取value
String value = condition.get(key)[0];
// 判断value是否有值
if(value!=null&&!"".equals(value)){
sb.append(" and "+key+" like '%?%'");
params.add(value);//?条件的值
}
}
System.out.println(sb.toString());
System.out.println(params);
return template.queryForObject(sb.toString(),Integer.class,params.toArray());
}
然后发现一直报错报错,其实根本不用加那俩单引号...
最后改进的代码 主要在params.add那里
public int findTotaCount(Map<String, String[]> condition) {
// 定义模板初始化
String sql="select count(*) from user where 1 = 1 ";
StringBuilder sb=new StringBuilder(sql);
// 2.遍历map
Set<String> keySet = condition.keySet();
// 定义一个参数的集合
List<Object> params =new ArrayList<Object>();
for (String key : keySet) {
if("currentPage".equals(key)||"rows".equals(key)){
continue;
}
// 获取value
String value = condition.get(key)[0];
// 判断value是否有值
if(value!=null&&!"".equals(value)){
sb.append(" and "+key+" like ?");
params.add("%"+value+"%");//?条件的值
}
}
System.out.println(sb.toString());
System.out.println(params);
return template.queryForObject(sb.toString(),Integer.class,params.toArray());
}