SQL高階查詢

十五小哥哥發表於2019-05-30

本文主要是對下圖的查詢方式的條件判斷進行講解:

如果還有更多的查詢條件,只要在下面方法中加入相對應的欄位,然後新增相應的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查詢中會影響查詢效能,不建議使用。

  方法三:程式碼比較多,容易寫錯。

  方法四:比較難理解,使用相對其它幾個方法比較麻煩。

 

相關文章