sql語句實現動態新增查詢條件
阿新 • • 發佈:2019-02-01
今天遇到一個問題,就是需要根據前端頁面傳送的條件查詢資料庫記錄,但是前端傳送的條件是不確定的。如果使用mybatis的xml方法可以使用if標籤靈活的新增判斷條件,但是現在我使用的就是單純的sql。
我是這樣解決的:
使用case when 語句可以完成這樣的sql拼接。值得注意的是判斷的時候用的是is null/is not null,而不要使用=/!=
昨天忘了判斷空字串,修改如下:
之前是直接使用sql實現,今天使用java的方式實現動態新增查詢條件:
操作如下:
(1)首先建立一個類封裝查詢條件
(2)然後建立一個類封裝查詢方法
public class CustomerPartnerDaoP { publicString selectPartner( GetParmeter getParmeter) { StringBuilder sql = new StringBuilder(); String ciname= getParmeter.getCiname(); String citelephone= getParmeter.getCitelephone(); int cisex= getParmeter.getCisex(); String cibirthday= getParmeter.getCibirthday(); String cizipcode= getParmeter.getCizipcode(); String cifax= getParmeter.getCifax(); String ciofficename= getParmeter.getCiofficename(); String ciareacode= getParmeter.getCiareacode(); String ciareafullname= getParmeter.getCiareafullname(); String ciaddress= getParmeter.getCiaddress(); String cimodifiedtime= getParmeter.getCimodifiedtime(); sql.append("select ciid,ciname,citelephone,cisex,cibirthday,cizipcode,cifax,ciofficename,ciareacode ,"+ "ciareafullname,ciaddress,cimodifiedtime from qb_customer_info where 1=1 "); if(!Objects.isNull(ciname) && !"".equals(ciname)){ sql.append(" and ciname").append("=").append("'"+ciname+"'"); } if(!Objects.isNull(citelephone) && !"".equals(citelephone)){ sql.append(" and citelephone").append("=").append("'"+citelephone+"'"); } if(!Objects.isNull(cisex) && !"".equals(cisex)){ sql.append(" and cisex").append("=").append(cisex); } if(!Objects.isNull(cibirthday) && !"".equals(cibirthday)){ sql.append(" and cibirthday").append("=").append("'"+cibirthday+"'"); } if(!Objects.isNull(cizipcode) && !"".equals(cizipcode)){ sql.append(" and cizipcode").append("=").append("'"+cizipcode+"'"); } if(!Objects.isNull(cifax) && !"".equals(cifax)){ sql.append(" and cifax").append("=").append("'"+cifax+"'"); } if(!Objects.isNull(ciofficename) && !"".equals(ciofficename)){ sql.append(" and ciofficename").append("=").append("'"+ciofficename+"'"); } if(!Objects.isNull(ciareacode) && !"".equals(ciareacode)){ sql.append(" and ciareacode").append("=").append("'"+ciareacode+"'"); } if(!Objects.isNull(ciareafullname) && !"".equals(ciareafullname)){ sql.append(" and ciareafullname").append("=").append("'"+ciareafullname+"'"); } if(!Objects.isNull(ciaddress) && !"".equals(ciaddress)){ sql.append(" and ciaddress").append("=").append("'"+ciaddress+"'"); } if(!Objects.isNull(cimodifiedtime) && !"".equals(cimodifiedtime)){ sql.append(" and cimodifiedtime").append("=").append("'"+cimodifiedtime+"'"); } return sql.toString(); }
(3)使用@SelectProvider方法呼叫
如有不同意見,歡迎指正!