public without sharing class QueryWrapper { private Map searchMap = new Map(); public String searchs = ''; private Schema.SObjectType type; private List sObjectFieldList = null; public QueryWrapper(Schema.SObjectType type){ this.type = type; } public QueryWrapper(Schema.SObjectType type, List sObjectFieldList){ this.type = type; this.sObjectFieldList = sObjectFieldList; } public QueryWrapper() { // more code here } //public QueryWrapper(String type){ // this.type = type; //} private String statmentType(Object o){ String whereO = ''; if(o instanceof Double) { whereO = ((Double)o).format(); } else if(o instanceof Integer){ whereO = ((Integer)o).format(); } else if(o instanceof Long){ whereO = ((Long)o).format(); } else if(o instanceof String){ if(!''.equals(o)){ whereO = '\'' + String.escapeSingleQuotes((String)o) + '\'' ; }else{ //报错 } } else if(o instanceof Boolean){ if((Boolean)o){ whereO = 'true'; }else{ whereO = 'false'; } } else if(o instanceof Decimal){ whereO = ((Decimal)o).format(); }else if(o instanceof ID){ // whereO = ((ID)o).format(); }else if(o instanceof Date){ whereO = ((Date)o).format(); }else if(o instanceof Datetime){ whereO = ((Datetime)o).format(); } return whereO; } private void statment(String column, Object o, String wheres){ String whereO = ''; if(column != null && column != '' && o != null){ if('='.equals(wheres.trim()) || '!='.equals(wheres.trim()) ) { whereO = statmentType(o); } else if(' Like '.equals(wheres)) { whereO = statmentType(o); if(!''.equals(whereO)){ //之前Like的sql拼写有误重新拼接 whereO = whereO.substring(1,whereO.length()-1); whereO = '%' + whereO + '%'; whereO = '\'' + whereO + '\'' ; } } else if(' rightLike '.equals(wheres)) { whereO = statmentType(o); if(!''.equals(whereO)){ //之前Like的sql拼写有误重新拼接 whereO = whereO.substring(1,whereO.length()-1); whereO = whereO + '%'; whereO = '\'' + whereO + '\'' ; } } else if(' leftLike '.equals(wheres)) { whereO = statmentType(o); if(!''.equals(whereO)){ //之前Like的sql拼写有误重新拼接 whereO = whereO.substring(1,whereO.length()-1); whereO = '%' + whereO; whereO = '\'' + whereO + '\'' ; } } if(searchs.equals('')){ searchs = searchs + column + wheres + whereO; }else{ searchs = searchs + ' AND ' + column + wheres + whereO; } searchMap.put(column, o); } else { // throw } } // in 和not in private void statmentIn(String column, List o, String wheres){ String inList = '('; if(o != null && o.size() > 0){ for(Object s : o){ if(s instanceof Double) { s = ((Double)s).format(); } else if(s instanceof Integer){ s = ((Integer)s).format(); } else if(s instanceof Long){ s = ((Long)s).format(); } else if(s instanceof String){ if(!''.equals(s)){ s = '\'' + String.escapeSingleQuotes((String)s) + '\'' ; }else{ //报错 } } inList += '' + s + ','; } inList = inList.substring(0,inList.length() - 1); inList += ')'; if(searchs.equals('')){ searchs = searchs + column + wheres + inList; }else{ searchs = searchs + ' AND ' + column + wheres + inList; } }else{ //报错 } } /** * 等于 */ public QueryWrapper eq(String column, Object o){ statment(column, o,' = '); return this; } /** * 不等于 */ public QueryWrapper ne(String column, Object o){ statment(column, o,' != '); return this; } /** * IN */ public QueryWrapper inPlus(String column, List o){ statmentIn(column,o,' In '); return this; } /** * not in */ public QueryWrapper notIn(String column, List o){ statmentIn(column,o,' notIn '); return this; } /** * 大于 */ public QueryWrapper gt(String column, Object o){ return null; } /** * 大于等于 */ public QueryWrapper ge(String column, Object o){ return null; } /** * 小于等于 */ public QueryWrapper lt(String column, Object o){ return null; } /** * 小于等于 */ public QueryWrapper le(String column, Object o){ return null; } /** * Like */ public QueryWrapper likePlus(String column, Object o){ statment(column,o,' Like '); return this; } /** * right LIKE */ public QueryWrapper likeRight(String column, Object o){ statment(column,o,' rightLike '); return this; } /** * left LIKE */ public QueryWrapper likeLeft(String column, Object o){ statment(column,o,' leftLike '); return this; } /** * is null */ public QueryWrapper isNull(String column){ return this; } /** * is not null */ public QueryWrapper isNotNull(String column){ return this; } /** * 排序 */ public QueryWrapper orderBy(String column, Object o){ searchMap.put('sort', column); searchMap.put('sortOrder', o); return this; } /** * 正序 */ public QueryWrapper orderByAsc(String column){ searchMap.put('sort', column); searchMap.put('sortOrder', 'asc'); return this; } /** * 倒序 */ public QueryWrapper orderByDesc(String column){ searchMap.put('sort', column); searchMap.put('sortOrder', ' desc'); return this; } //group by public QueryWrapper groupBy(String column, String o){ searchMap.put('groupby', o); return this; } public Schema.SObjectType getType(){ return this.type; } public void setType(Schema.SObjectType type){ this.type = type; } public List getSObjectFieldList(){ return this.sObjectFieldList; } public void setSObjectFieldList(List sObjectField){ this.sObjectFieldList = sObjectField; } public String build(){ String s = ''; if(!''.equals(searchs)){ s = ' where ' + searchs; } if(searchMap.containsKey('groupby') && !''.equals(searchMap.get('groupby'))){ s = s + ' group by ' + searchMap.get('groupby'); } if(searchMap.containsKey('sort') && !''.equals(searchMap.get('sort')) && !''.equals('sortOrder')){ s = s + ' order by ' + searchMap.get('sort') + ' ' + searchMap.get('sortOrder'); } return s; } }