注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

星期五

明天不上班

 
 
 

日志

 
 
关于我

一个特立独行的Java程序员,比较宅,上上网,写博客,听音乐,看电影。

网易考拉推荐

简单Java问题(关于SQL语句 组合Where条件)  

2011-09-27 23:35:09|  分类: Java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
今天看到一个实习生的Code,我几乎无语。
为了组合SQL语句的where条件,他使用if语句去组合所有可能的where条件的组合情况,code逻辑相当复杂,很不优雅。
因为随着where条件的增多,逻辑越来越复杂。

其实我们可以借鉴Hibernate的Criteria方式写一个简单的类来处理这种Case:

1.写一个Where条件Bean:
        public class ConditionBean
 属性: 
private String columnName;
private String whereCondition;
private String columnValue;

2.写一个ConditionUtils:(写的比较简单只处理多个条件and的情况)

package com.hjzheng.sql.util;

import java.util.ArrayList;
import java.util.List;

public class ConditionUtils {
private String sql;
private List<String> conditionList = new ArrayList<String>();

public ConditionUtils(String sql) {
this.sql = sql;
}
       //添加where条件Bean
public void addConditionBean(ConditionBean cb) {
conditionList.add(cb.toString());
}
       //删除where条件Bean
public void removeConditionBean(ConditionBean cb) {
conditionList.remove(cb.toString());
}
       //返回完整的SQL语句
public String getSqlStatement() {
return sql + combinationConditionBean();
}
       //将where条件使用and合并,使用List转字符串,再replace很方便,而且逻辑很简单啊
private String combinationConditionBean() {
if (conditionList.size()  ==  0)  return null;
//使用 and 替换 “,”
      String whereStr = conditionList.toString().replaceAll(",", " and");
  //删除 []
return " where " + whereStr.substring(1, whereStr.length() - 1);
}
}

3.测试

package com.platform.sql.util;

public class Test {

  public static void main(String[] args) {
String sql = "select text1, text2, text3 from table";
ConditionUtils cu = new ConditionUtils(sql);
ConditionBean cb1 = new ConditionBean("text1","=","'value1'");
cu.addConditionBean(cb1);
ConditionBean cb2 = new ConditionBean("text2",">=","value2");
cu.addConditionBean(cb2);
ConditionBean cb3 = new ConditionBean("text3","like","'%value3%'");
cu.addConditionBean(cb3);
System.out.println(cu.getSqlStatement());
}

}

console 输出:

select text1, text2, text3 from table where text1 = 'value1' and text2 >= value2 and text3 like '%value3%'
  评论这张
 
阅读(803)| 评论(0)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017