三个类:

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());