java web中的多條件查詢


轉自: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方法即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM