三個類:
Opt.java //sql語句運算符枚舉類 Condition.java //查詢條件類, SqlHandle.java //拼接工具類
Opt.java代碼如下:
public enum Opt { // 等於 Equal, // 不等於 UnEqual, // 大於 GreatThan, // 小於 LessThan, // 模糊like Like }
Condition.java代碼如下:
public class Condition { private String name;// 條件名 private Opt Opertion;// 運算符 private Object value;// 條件值 public Condition() { super(); } public Condition(Opt opertion, String name, Object value) { super(); Opertion = opertion; this.name = name; this.setValue(value); } public static Condition eq(String propertyName, Object value) { return new Condition(Opt.Equal, propertyName, value); } public static Condition like(String propertyName, Object value) { return new Condition(Opt.Like, propertyName, value); } public String getName() { return name; } public void setName(String name) { this.name = name; } public Opt getOpertion() { return Opertion; } public void setOpertion(Opt opertion) { Opertion = opertion; } public Object getValue() { return value; } public void setValue(Object value) { if (this.Opertion != null && this.Opertion.equals(Opt.Like)) { this.value = "%" + value + "%"; } else { this.value = value; } } }
SqlHandle.java代碼如下:
public class SqlHandle { private StringBuffer sql; private List<Condition> list = new ArrayList<Condition>(); public SqlHandle() { } public SqlHandle(String sql) { this.sql = new StringBuffer(sql); } public static SqlHandle getInstance(String sql) { return new SqlHandle(sql); } /** * * @類名稱:add * @類描述:添加條件 * @param condition */ public void add(Condition condition) { this.list.add(condition); } public String getSql() { return this.sql.append(this.getwhereString()).toString(); } public void printSql() { System.out.println("生成的sql語句:" + this.sql.toString() + this.getwhereString()); } /* * 得到where子句,以?為占位符。 */ /** * * @類名稱:getwhereString * @類描述:得到where子句,以?為占位符。通過條件集合中所存儲的條件進行and拼接的where子句 * @注意:不能與getwhereOrString同時使用 * @return:拼接好的where子句 */ public String getwhereString() { StringBuffer sb = new StringBuffer(); if (list.size() <= 0) { return ""; } else { sb.append(" where 1=1 and"); for (Condition item : list) { sb.append(" " + item.getName()); switch (item.getOpertion()) { case Equal: sb.append(" = "); break; case UnEqual: sb.append(" <> "); break; case GreatThan: sb.append(" >= "); break; case LessThan: sb.append(" <= "); break; case Like: sb.append(" like "); break; } sb.append("? and"); } if (sb.toString().endsWith("and")) { sb.delete(sb.length() - 3, sb.length()); } return sb.toString(); } } /** * * @類名稱:getwhereOrString * @類描述:得到where子句,以?為占位符。通過條件集合中所存儲的條件進行or拼接的where子句 * @注意:不能與getwhereString同時使用 * @return:拼接好的where子句 * @創建時間2014/4/16 */ public String getwhereOrString() { String result = this.getwhereString(); return result.replace("and", "or"); } /** * * @類名稱:getwhereNotWithWhere * @類描述:得到where子句,以?為占位符。通過條件集合中所存儲的條件進行and拼接的where子句,並且去掉where關鍵字 * @注意:不能與其他getwhere方法同時使用 * @return:拼接好的where子句,去掉where關鍵字 * @創建時間2014/4/16 */ public String getwhereNotWithWhere() { String result = this.getwhereString(); return result.replace(" where ", " "); } /** * * @類名稱:getwhereValues * @類描述:通過條件集合中的條件得到與where字句位置對應的object集合。存儲所有的值 * @return: */ public Object[] getwhereValues() { Object[] obj = new Object[this.list.size()]; for (int i = 0; i < this.list.size(); i++) { obj[i] = this.list.get(i).getValue(); } return obj; } }
使用舉例:
SqlHandle sqlHandle = SqlHandle.getInstance("from courseWare_CourseWare cw"); if (searchBean != null) { // searchBean不為空,設置查詢條件 String cwName = searchBean.getCwName(); String cwNo = searchBean.getCwNo(); String cwBatchId = searchBean.getFkCwBatchId() != null ? searchBean.getFkCwBatchId().getId() : null; String fkPlanTerm = searchBean.getFkPlanTerm(); if (cwName != null && !cwName.isEmpty()) { // 課件名稱查詢 sqlHandle.add(Condition.like("cw.cwName", cwName)); } if (cwNo != null && !cwNo.isEmpty()) { // 課件編號查詢 sqlHandle.add(Condition.like("cw.cwNo", cwNo)); } if (cwBatchId != null && !cwBatchId.isEmpty()) { // 批次分類查詢 sqlHandle.add(Condition.eq("cw.fkCwBatchId.id", cwBatchId)); } if (fkPlanTerm != null && !fkPlanTerm.isEmpty()) { sqlHandle.add(Condition.like("cw.fkPlanTerm", fkPlanTerm)); } } page = this.courseWareDao.findForPaginationByHql(sqlHandle.getSql(), sqlHandle.getwhereValues(), page.getPageNo(), page.getPageSize());
記下來只是當做筆記,功能還非常不完善,后續會完善。