java中的复杂查询sql语句实现:
这样的查询栏,在页面中很常见,这就是复杂查询的条件,我们可以填写一个条件或多个条件,也可以一个都不填写,在这样的情况下我们的sql语句就不能是一个固定的String类型的字符串。
看到这相信大家都想到用什么来定义sql语句了,没错就是StringBuilder,基本模板应该就是
String sql = "select * from `user` ";
StringBuilder sb = new StringBuilder(sql);
但是这一步之后就存在一个难点,如何添加查询条件呢?
判断每一个条件,如果条件存在且不为空,拼接字符串,用模糊查询
sb.append(" where name like ? ");
理论上没错,但是如果多个条件呢?
sql语句就存在问题了,当多个条件存在时,sql语句就被拼接成
String sql = "select * from `user` where name like ? where address like ?"
这明显是不行的,有一个最简单的方法去定义一个正确的基本模板
String sql = "select * from `user` where 1 = 1 ";
在上面的模板上添加一个where 1 = 1 ,恒成立条件,无论有没有条件,都可以运行,那么存在条件的拼接语句就可以写出来了
sb.append(" and name like ? ");
String sql = "select * from `user` where 1 = 1 " //没有条件的查询
//当多个条件存在时
String sql = "select * from `user` where 1 = 1 and name like ? and address like ? "
//多个条件也能成立
但是还有两个特别需要注意的点就是:
1.拼接字符串时,应该在拼接的开头敲上一个空格,这样才能让拼接起来的字符串之间存在空格不会变成连在一起的字符串,那样也会报错
2.填充占位符时,直接把值填上是不行的,因为我们需要的是模糊查询,所以我们应该在填充值的时候在值的前面和后面加上“%”号。