1.场景再现
如下图:有时候可以只用cid进行查询,有时候也只用rname查询,有时候二者之间又要结合查询,其中的rname为模糊查询。综上分析组合查询可以解决问题!
2.代码
JdbcTemplate template=new JdbcTemplate(JDBCUtils.getDataSource());
String sql="select * from tab_route where 1=1";
StringBuilder sb=new StringBuilder(sql);
List params=new ArrayList();//小技巧
//2.判断参数是否有值
if(cid!=0){
sb.append( " and cid=? " );
params.add(cid);
}
if(rname!=null&&rname.length()>0){
sb.append( "and rname like ? " );//模糊查询
params.add("%"+rname+"%");
}
//分页,细节,要有空格
sb.append(" limit ?,? ");
params.add(start);
params.add(pageSize);
sql=sb.toString();
return template.query(sql,new BeanPropertyRowMapper<Route>(Route.class),params.toArray());
以上代码为部分代码:大家不懂没关系,接下来看技巧
技巧1:这样写在拼接字符串的时候直接用and拼接就好了
String sql="select * from tab_route where 1=1";
技巧2:利用StringBuilder的append,拼接字符串
StringBuilder sb=new StringBuilder(sql);
技巧3:Jdbc连接池的时候,用数组来传递多个参数,params.toArray()
List params=new ArrayList();//小技巧
params.add(cid);
params.add("%"+rname+"%");
params.add(start);
params.add(pageSize);
return template.query(sql,new BeanPropertyRowMapper<Route>(Route.class),params.toArray());