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
版权声明:本文为tatame原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。