本文主要是對下圖的查詢方式的條件判斷進行講解:
如果還有更多的查詢條件,只要在下面方法中加入相對應的欄位,然後新增相應的get和set方法,最後在
getQueryCondition方法中加入相對應的條件判斷語句if就可以了。
public class SqlCondition { //職位:用於查詢的條件判斷 private String title; //職位型別:用於查詢的條件判斷 private Integer positiontype; public SqlCondition() { super(); } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public Integer getPositiontype() { return positiontype; } public void setPositiontype(Integer positiontype) { this.positiontype = positiontype; } /** * 查詢語句的條件判斷 * 方法一(推薦使用): */ public String getQueryCondition_01(){ String whereSql=""; if(title !=null && !"".equals(title)){ whereSql += " and title like '%"+title+"%'"; } if(positiontype!=null && !"".equals(positiontype)){ whereSql+=" and positiontype = "+positiontype; } //replace:替換;First:第一個 return whereSql.replaceFirst("and", "where"); } /** * 查詢語句的條件判斷 * 方法二(不推薦使用): where 1==1 會影響查詢的效能 */ public String getQueryCondition_02(){ String whereSql = "where 1==1"; if(title != null && !"".equals(title)){ whereSql+= "and title like '%"+title+"%'"; } if(positiontype !=null){ whereSql += "and positiontype = " +positiontype; } return whereSql; } /** * 查詢語句的條件判斷 * 方法三(準備一個標識(即一個flag) 如果標識是true,條件前就加where,如果是false,條件前就加and): */ public String getQueryCondition_03(){ //標識:flag boolean flag = true; String whereSql = ""; //title不為null,並且不為空字串 if(title!=null && !"".equals(title)){ if(flag){ whereSql+= " where "; flag = false; }else{ whereSql+= " and "; } whereSql += " title like '%"+title+"%' "; } if(positiontype!=null){ if(flag){ whereSql+= " where "; flag = false; }else{ whereSql+= " and "; } whereSql += " positiontype = "+positiontype; } return whereSql; } /** * 查詢語句的條件判斷 * 方法四(準備一個集合): */ public String getQueryCondition_04(){ //準備一個集合(裡面會裝我們們的所有條件) List<String> sqlList = new ArrayList<>(); String whereSql = ""; //title不為null,並且不為空字串 if(title!=null && !"".equals(title)){ sqlList.add(" title like '%"+title+"%' "); } if(positiontype!=null){ sqlList.add(" positiontype = "+positiontype); } //查詢條件加多了,只要在這加if語句就可以了 //遍歷這個集合 for (int i = 0; i < sqlList.size(); i++) { if(i==0){ //第一次迴圈,前面肯定是加where whereSql += " where "; }else{ //第2-n次迴圈,前面肯定是加and whereSql += " and "; } whereSql += sqlList.get(i); } return whereSql; }
最後在需要的SQL語句中引入條件判斷方法即可。
四種方法特點分析:
方法一:比較簡單,容易看懂,不會影響查詢效能,推薦使用。
方法二:雖然比方法一少了幾個程式碼,但 where == 1在sql查詢中會影響查詢效能,不建議使用。
方法三:程式碼比較多,容易寫錯。
方法四:比較難理解,使用相對其它幾個方法比較麻煩。