Bootstrap

SQL 多条件组合查询(模糊查询)

前提设定:

 假如现在有一个提交表单,里面是N个查询的条件,用户可以只填写其中的几个条件来进行查询。(也可以不填写条件)

 

解决思想:

       

 

              判断用户填入的条件参数不为null以及除去空格不为空,满足该条件后,使用sql语句拼凑。

解决:

 

                 首先给出sql 语句前半句:

StringBuilder sql = new StringBuilder("select * from t_customer where 1=1");

                后面的 where 1=1  是一个始终成立的条件,是为了防止用户一个条件也没有填,那么就是查询所有,即使只有sql语句的前半段,也不会出现问题!

                再给出sql语句的后半段(后半段的存在就说明了用户填写了1~N个条件)

我们只需将这些条件拼凑起来即可!

 

代码示意:

public List<Customer> topQuery(Customer criteria) {
		try {
			
			/*
			 * 1. 给出一个sql语句前半部
			 */
			StringBuilder sql = new StringBuilder("select * from t_customer where 1=1");
			/*
			 * 2. 判断条件,完成向sql中追加where子句
			 */
			/*
			 * 3. 创建一个ArrayList,用来装载参数值
			 */
			List<Object> params = new ArrayList<Object>();
			String cname = criteria.getCname();
			if(cname != null && !cname.trim().isEmpty()) {
				sql.append(" and cname like ?");
				params.add("%" + cname + "%");
			}
			
			String gender = criteria.getGender();
			if(gender != null && !gender.trim().isEmpty()) {
				sql.append(" and gender=?");
				params.add(gender);
			}
			
			String cellphone = criteria.getCellphone();
			if(cellphone != null && !cellphone.trim().isEmpty()) {
				sql.append(" and cellphone like ?");
				params.add("%" + cellphone + "%");
			}
			
			String email = criteria.getEmail();
			if(email != null && !email.trim().isEmpty()) {
				sql.append(" and email like ?");
				params.add("%" + email + "%");
			}
			
			/*
			 * 三、执行query
			 */
			return qr.query(sql.toString(), 
					new BeanListHandler<Customer>(Customer.class), 
					params.toArray());
		} catch(SQLException e) {
			throw new RuntimeException(e);
		}

 

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;