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

星期五

明天不上班

 
 
 

日志

 
 
关于我

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

网易考拉推荐

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

2011-10-05 13:25:15|  分类: Java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
上次写了一个简单的SQL语句处理,不是很满意。于是又写了一个。
原理和上次的基本一样,使用List,然后使用and 和 or 来连接List中的String,不过这次使用的是Apache commonsStringUtils Join方法。

Condition 类,用来存储基本的where 条件
结构如下
package com.platform.sql.utils;

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

import org.apache.commons.lang.StringUtils;

public class Condition {
    private List<String> ConditionList = new ArrayList<String>();

    public List<String> getConditionList() {
        return ConditionList;
    }

    public void setConditionList(List<String> conditionList) {
        ConditionList = conditionList;
    }
   
    public void cleanCondition() {
        ConditionList.clear();
    }

    public void between(String name, String min, String max) {
        ConditionList.add(name + " between " + min + " and " + max);
    }

    public void in(String name, String[] values) {
        ConditionList.add(name + " in ( " + StringUtils.join(values, ",") + " )");
    }

    public void like(String name, String value) {
        ConditionList.add(name + " like " + value);
    }

    public void eq(String name, String value) {
        ConditionList.add(name + " = " + value);
    }

    public void ne(String name, String value) {
        ConditionList.add(name + " != " + value);
    }

    public void gt(String name, String value) {
        ConditionList.add(name + " > " + value);
    }

    public void lt(String name, String value) {
        ConditionList.add(name + " < " + value);
    }

    public void le(String name, String value) {
        ConditionList.add(name + " <= " + value);
    }

    public void ge(String name, String value) {
        ConditionList.add(name + " >= " + value);
    }
   
    public void add(String name, String condition, String value) {
        ConditionList.add(name + " " + condition + " " + value);
    }

}


接着是ConditionUtils 用来组合Condition (使用 and 或者 or 都OK)
结构如下

package com.platform.sql.utils;

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

import org.apache.commons.lang.StringUtils;

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

    public ConditionUtils(String sql) {
        this.sql = sql;
    }

    public void addConditionByAnd(Condition condition) {
        conditions.add(combinationCondition(condition, "and"));
    }

    public void addConditionByOr(Condition condition) {
        conditions.add(combinationCondition(condition, "or"));
    }

    public void addOrderBy(String sortName, String dir) {
        this.orderBy = " order by " + sortName + " " + dir;
    }
   
    public String getSqlString() {
        return sql + combinationConditions() + orderBy;
    }

    private String combinationCondition(Condition condition, String contact) {
        List<String> conditionList = condition.getConditionList();
        if (conditionList.size() == 0) return null;
        return StringUtils.join(conditionList, " "+contact+" ");
    }
   
    private String combinationConditions() {
        if (conditions.size() == 0) return null;
        return " where " + StringUtils.join(conditions, " and ");
    }
   
}

 接着是简单的测试

package com.platform.sql.utils;

public class Test {

    public static void main(String[] args) {
       
        String sql = "select music_name, music_author, music_type, music_length, music_size from music_table";
       
        Condition condition = new Condition();
        condition.eq("music_name", "'Someone like you'");
        condition.like("music_author", "'%Adele%'");
       
        ConditionUtils cu = new ConditionUtils(sql);
         
        cu.addConditionByOr(condition);
       
        System.out.println(cu.getSqlString());
        //clear condition
        condition.cleanCondition();
       
        condition.between("music_length", "2", "4");
        condition.ge("music_size", "2");
       
        cu.addConditionByAnd(condition);
       
        System.out.println(cu.getSqlString());

    }

}

console 输出:

select music_name, music_author, music_type, music_length, music_size from music_table where music_name = 'Someone like you' or music_author like '%Adele%'
select music_name, music_author, music_type, music_length, music_size from music_table where music_name = 'Someone like you' or music_author like '%Adele%' and music_length between 2 and 4 and music_size >= 2


希望这个简单的类可以帮到你。
  评论这张
 
阅读(528)| 评论(0)
推荐

历史上的今天

评论

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

页脚

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