轉自:http://blog.csdn.net/xulu_258/article/details/46623317
所謂多條件查詢即為用戶輸入想要查詢的條件,然后根據用戶輸入的條件進行查詢。
當用戶有可能什么也不輸入,這個條件我們應該考慮到。如果不輸入就查詢,則我們在頁面上顯示所有的查詢結果,
當用戶輸入一個條件,我們則根據用戶輸入的這一個條件來進行查詢,兩個條件,三個條件也是一樣,
而這個時候我們就應該考慮一下查詢條件是可變的,我們應該怎樣根據可變的條件來書寫sql語句,我們應該首先會想到if條件語句,如果用戶輸入,我們就把輸入的添加到sql語句中,但是這樣的話我們應該考慮到實際情況下,如果突然客戶又讓我們加一個條件,我們又得重新更改我們的if條件語句,不僅復雜而且浪費時間;
因此我們得重新考慮一種解決方法,可以用StringBuilder來new一個基本的查詢語句,例如:"select * from customer(表名) where 1=1",
where 1=1 :就是為了append后面的and語句的,and語句需要在where后面嘛,之后的條件是通過 if 塊動態變化的,比如下面這一段代碼
要查詢的字段有:cname gender cellphone email
首先定義sql的前半段固定代碼
"select * from t_customer where 1=1"
當cname選項被選中時,
sql.append(" and cname like ?");
sql查詢語句就變成了:
select * from t_customer where 1=1 and cname like ?
當gender也被選中時,sql查詢語句就變成了:
select * from t_customer where 1=1 and cname like ? and gender=?
以此類推
public List<Customer> query(Customer criteria) { try{ //給出sql模板,為了便於后面添加sql語句 StringBuilder sql =new StringBuilder("select * from t_customer where 1=1"); //給出parmas List<Object> parmas = new ArrayList<Object>(); String cname = criteria.getCname(); if(cname != null && !cname.trim().isEmpty()){ sql.append(" and cname like ?"); parmas.add("%" +cname+ "%"); } String gender= criteria.getGender(); if(gender != null && !gender.trim().isEmpty()){ sql.append(" and gender=?"); parmas.add(gender); } String cellphone= criteria.getCellphone(); if(cellphone != null && !cellphone.trim().isEmpty()){ sql.append(" and cellphone like ?"); parmas.add("%" +cellphone+ "%"); } String email= criteria.getEmail(); if(email != null && !email.trim().isEmpty()){ sql.append(" and email like ?"); parmas.add("%" +email+ "%"); } return qr.query(sql.toString(), new BeanListHandler<Customer>(Customer.class),parmas.toArray()); }catch(SQLException e){ throw new RuntimeException(e); } }
解決了這個問題,我們就知道了有多少個問號,我們就向集合中添加這個屬性,最后執行QueryRunner的query方法即可。