hibernate带条件的关联查询

public List queryPage(Class clazz, String[] cascades, int start, int limit,
            List<Criterion> exs) {
        Criteria criteria = getSession().createCriteria(clazz);
        /**
         * 设置分页限制
         */
        if (cascades.length > 0) {
            for (String c : cascades) {
                criteria = getSession().createCriteria(clazz).setFetchMode(c,
                        FetchMode.EAGER);
                if (exs != null && exs.size() > 0) {
                    for (Criterion i : exs) {
                        criteria.add(i);
                    }
                }
                if (!String.valueOf(start).isEmpty()) {
                    criteria.setFirstResult(start);
                }
                if (!String.valueOf(limit).isEmpty()) {
                    criteria.setMaxResults(limit);
                }
            }
        }
        return criteria.list();

    }
/**
     * 条件查询
     * 
     * @return
     * @throws ParseException
     */
    public List<Criterion> completeCriterion() throws ParseException {
        List<Criterion> cris = new ArrayList<Criterion>();
        Enumeration params = (Enumeration) this.servletRequest
                .getParameterNames();
        while (params.hasMoreElements()) {
            String param = (String) params.nextElement();
            if (param.contains("_")) {
                String[] array = param.split("_");
                String paramname = "";
                String action = "";
                String type = "";
                if (array.length == 3) {
                    paramname = array[0];
                    action = array[1];
                    type = array[2];
                }
                if (array.length == 4) {
                    paramname = array[0] + "." + array[1];
                    action = array[2];
                    type = array[3];
                }
                if (Util.isValidSring(paramname) && Util.isValidSring(action)
                        && Util.isValidSring(type)) {
                    String paramvalue = this.servletRequest.getParameter(param);
                    if (Util.isValidSring(paramvalue) == true) {
                        Criterion c = null;
                        if (action.equals("LIKE")) {
                            c = Expression.like(paramname, this.value(type,
                                    paramvalue).toString(), MatchMode.ANYWHERE);
                        }
                        if (action.equals("GT")) {
                            c = Expression.gt(paramname, this.value(type,
                                    paramvalue));
                        }
                        if (action.equals("LT")) {
                            c = Expression.lt(paramname, this.value(type,
                                    paramvalue));
                        }
                        if (action.equals("EQ")) {
                            c = Expression.eq(paramname, this.value(type,
                                    paramvalue));
                        }
                        if (c != null) {
                            cris.add(c);
                        }
                    }
                }
            }
        }
        return cris;
    }

    public Object value(String type, String paramvalue) throws ParseException {
        if (type.equals("DATE")) {
            return DateFormat.getDateInstance().parse(paramvalue);
        }
        if (type.equals("LONG")) {
            return Long.valueOf(paramvalue);
        }
        if (type.equals("INT")) {
            return Integer.valueOf(paramvalue);
        } else {
            return paramvalue;
        }
    }

    /**
     * 匹配公式符号
     * 
     * @param f
     * @return
     */
    public String completeFormula(String f) {
        if (f.equals("LIKE")) {
            return " like ";
        }
        if (f.equals("GT")) {
            return " > ";
        }
        if (f.equals("LT")) {
            return " < ";
        }
        if (f.equals("EQ")) {
            return " = ";
        } else {
            return "";
        }
    }

用法

    int st = (getPageI() - 1) * getLimitI();
            List list = this.cservice.queryPage(Job.class,
                    new String[] { "depart" }, st, getLimitI(),
                    completeCriterion());

参数的形式如下:

name_EQ_STRING

createDate_GT_DATE

createDATE_LT_DATE

sex_EQ_INT

age_EQ_LONG

posted @ 2012-06-17 12:20  园林鸟  阅读(1659)  评论(0编辑  收藏  举报