此文章是基于  搭建Jquery+SpringMVC+Spring+Hibernate+MySQL平台

一. 类文件介绍  

  1. CriteriaBuilder.java,DetachedCriteria构建类

package com.ims.persistence.base;

import java.math.BigDecimal;
import java.sql.Types;
import java.util.Map; import org.apache.commons.lang3.StringUtils;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions; import com.ims.common.DateUtil; public class CriteriaBuilder {
private DetachedCriteria detachedCriteria;
private Map<String, ?> parmasMap; public CriteriaBuilder(DetachedCriteria detachedCriteria, Map<String, ?> parmasMap){
this.detachedCriteria = detachedCriteria;
this.parmasMap = parmasMap;
} public DetachedCriteria addCriterion(String propertyName,String paramName){
return addCriterion(propertyName,paramName,Expression.EQ);
} public DetachedCriteria addCriterion(String propertyName,String paramName,Expression expression){
return addCriterion(propertyName, paramName, Types.VARCHAR, expression);
} public DetachedCriteria addCriterion(String propertyName,String paramName, Integer propertyType){
return addCriterion(propertyName,paramName,propertyType,Expression.EQ);
} public DetachedCriteria addCriterion(String propertyName,String paramName, Integer propertyType, Expression expression){
if(parmasMap!=null){
Criterion criterion = buildCriterion(propertyName,paramName,propertyType,expression);
if(null!=criterion){
detachedCriteria.add(criterion);
}
}
return detachedCriteria;
} private Criterion buildCriterion(String propertyName,String paramName,Integer propertyType,Expression expression){
boolean propertyBlank = true;
Object paramValue = parmasMap.get(paramName);
if(paramValue!=null && StringUtils.isNotBlank(paramValue.toString())){
propertyBlank = false;
} Criterion criterion = null;
if(!propertyBlank){
switch(propertyType){
case Types.INTEGER:
paramValue = Integer.valueOf(paramValue.toString());
break;
case Types.VARCHAR:
paramValue = paramValue.toString();
break;
case Types.DATE:
paramValue = DateUtil.stringToDate(paramValue.toString());
break;
case Types.DECIMAL:
paramValue = new BigDecimal(paramValue.toString());
break;
}
switch(expression){
case EQ:
criterion = Restrictions.eq(propertyName, paramValue);
break;
case NE:
criterion = Restrictions.ne(propertyName, paramValue);
break;
case GT:
criterion = Restrictions.gt(propertyName, paramValue);
break;
case GE:
criterion = Restrictions.ge(propertyName, paramValue);
break;
case LT:
criterion = Restrictions.lt(propertyName, paramValue);
break;
case LE:
criterion = Restrictions.le(propertyName, paramValue);
break;
}
}
return criterion;
} public DetachedCriteria addLikeCriterion(String propertyName,String paramName){
return addLikeCriterion(propertyName,paramName,MatchMode.ANYWHERE);
} public DetachedCriteria addLikeCriterion(String propertyName,String paramName,MatchMode matchMode){
if(parmasMap!=null){
Criterion criterion = buildLikeCriterion(propertyName,paramName,matchMode);
if(null!=criterion){
detachedCriteria.add(criterion);
}
}
return detachedCriteria;
} public Criterion buildLikeCriterion(String propertyName,String paramName,MatchMode matchMode){
Criterion criterion = null;
Object paramValue = parmasMap.get(paramName);
if(paramValue!=null && StringUtils.isNotBlank(paramValue.toString())){
criterion = Restrictions.like(propertyName, paramValue.toString(), matchMode);
}
return criterion;
}
}

  2. Expression.java,比较运算符枚举类

package com.ims.persistence.base;

public enum Expression {
/** 等于 */
EQ,
/** 不等于 */
NE,
/** 大于 */
GT,
/** 大于等于 */
GE,
/** 小于 */
LT,
/** 小于等于 */
LE;
}

二. 使用方法介绍
  1. 使用如类:WarehouseBSImpl.java

public class WarehouseBSImpl implements WarehouseBS{
private DetachedCriteria buildCriteria(DetachedCriteria detachedCriteria, Map<String, Object> params){
CriteriaBuilder criteriaBuilder = new CriteriaBuilder(detachedCriteria, params);
criteriaBuilder.addCriterion("warehouse.projectCode", "projectCode");
return detachedCriteria;
} @Override
public List<Map<String, Object>> getWarehouses(String projectCode) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("projectCode", projectCode);
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Warehouse.class, "warehouse");
buildCriteria(detachedCriteria, params); ProjectionList pList = Projections.projectionList();
pList.add(Projections.property("warehouse.warehouseCode").as("value"));
pList.add(Projections.property("warehouse.warehouseName").as("text"));
detachedCriteria.setProjection(pList);
detachedCriteria.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); return warehouseDao.findByCriteria(detachedCriteria);
} }

利用DetachedCriteria构建HQL参数动态匹配的更多相关文章

  1. 全面解读Python Web开发框架Django,利用Django构建web应用及其部署

    全面解读Python Web开发框架Django Django是一个开源的Web应用框架,由Python写成.采用MVC的软件设计模式,主要目标是使得开发复杂的.数据库驱动的网站变得简单.Django ...

  2. Spark:利用Eclipse构建Spark集成开发环境

    前一篇文章“Apache Spark学习:将Spark部署到Hadoop 2.2.0上”介绍了如何使用Maven编译生成可直接运行在Hadoop 2.2.0上的Spark jar包,而本文则在此基础上 ...

  3. [Gradle] 在 Eclipse 下利用 gradle 构建系统

      转载自:http://www.ibm.com/developerworks/cn/opensource/os-cn-gradle/ 构建系统时候常常要用到 Ant, Maven 等工具,对于初学者 ...

  4. 利用 vue-cli 构建一个 Vue 项目

    一.项目初始构建 现在如果要构建一个 Vue 的项目,最方便的方式,莫过于使用官方的 vue-cli . 首先,咱们先来全局安装 vue-cli ,打开命令行工具,输入以下命令: $ npm inst ...

  5. 利用Dockerfile构建一个基于centos 7,包括java 8, tomcat 7,php ,mysql+mycat的镜像

    Dockerfile内容如下: FROM centos MAINTAINER Victor ivictor@foxmail.com WORKDIR /root RUN rm -f /etc/yum.r ...

  6. asp.net向后台传参数动态加载图片

    //向后台传参数动态加载图片 $(function() { $("#Button1").click(function() { var stockcode = getUrlParam ...

  7. springboot+mybatis-puls利用swagger构建api文档

    项目开发常采用前后端分离的方式.前后端通过API进行交互,在Swagger UI中,前后端人员能够直观预览并且测试API,方便前后端人员同步开发. 在SpringBoot中集成swagger,步骤如下 ...

  8. 利用openssl构建根证书-服务器证书-客户证书

    利用openssl构建根证书-服务器证书-客户证书 OpenSSL功能远胜于KeyTool,可用于根证书,服务器证书和客户证书的管理 一.构建根证书 1.构建根证书前,需要构建随机数文件(.rand) ...

  9. [转]利用Docker构建开发环境

    利用Docker构建开发环境 Posted by  makewonder on 2014 年 4 月 2 日   最近接触PAAS相关的知识,在研发过程中开始使用Docker搭建了自己完整的开发环境, ...

随机推荐

  1. 使用nwjs开发桌面应用之Hello,World!

    今天发现原来JavaScript也可以用来开发桌面应用程序,顿时有一种很牛逼的感觉,于是马上就开始了Hello,World!,感受一下JavaScript的强大. 可以用来开发桌面应用的js框架有三种 ...

  2. MVC 验证码实现( 简易版)

    现在网站上越来越多的验证码,使用场景也是越来越多,登陆.注册.上传.下载...等等地方,都有可能大量使用到验证码,那么制作验证码到底有多简单呢?我们一起来看下最简易版的验证码实现过程- 验证码的基本步 ...

  3. ORACLE 11gR2 DG(Physical Standby)日常维护02

    环境:RHEL 6.5 + Oracle 11.2.0.4 三.监控DG的状态 3.1监控DG备库的状态 3.2监控主库传输日志链路的状态 四.备库切换为snapshot standby 4.1备库切 ...

  4. Apworks框架实战(六):使用基于Entity Framework的仓储基础结构

    在前面的章节中,我们已经设计了一个简单的领域模型,接下来我们希望能够实现领域模型的持久化及查询.在Apworks中,实现了面向Entity Framework.NHibernate以及MongoDB的 ...

  5. error RC1015: cannot open include file 'afxres.h' 解决办法

    在为WindowsPhone8程序添加本地化的过程中遇到这个问题: 问题原因就是afxres.h文件缺失,下载它,放到VS安装目录下的VS\include目录下就可以了(选择目录的时候注意对应对版本) ...

  6. WPF 后台数据触发改变界面状态-心跳实现

    今年做的一个上位机工控WPF项目,做个小小的总结把,以后随时来找 请不要带血乱喷,我只是菜鸟.___by 鲍队 类似于这样子的;大致的意思是:一个代码变量,通过改变变量的值,绑定这个变量的这个圆颜色也 ...

  7. 创建虚拟目录失败,必须为服务器名称指定“localhost”?看进来!!

    没废话,直接讲! 关于微信开发过程,远程调试后,再次打开vs出现项目加载失败的解决办法! 上图: 这图应该不陌生,你肯定打开iis把绑定的域名给干掉了.这个提示很坑人,简直就是坑爹!!!fck!! 来 ...

  8. Android 的进程和线程

    进程和线程 如果某个应用程序组件是第一次被启动,且这时应用程序也没有其他组件在运行,则android系统会为应用程序创建一个包含单个线程的linux进程.默认情况下,同一个应用程序的所有组件都运行在同 ...

  9. 记录一次bug解决过程:velocity中获取url中的参数

    一.总结 在Webx的Velocity中获取url中参数:$rundata.getRequest().getParameter('userId') 在Webx项目中,防止CSRF攻击(Cross-si ...

  10. 2016年最新mac下vscode配置golang开发环境支持debug

    网上目前还找不到完整的mac下golang环境配置支持,本人配置成功,现在整理分享出来. mac最好装下xcode,好像有依赖关系安装Homebrew打开终端窗口, 粘贴脚本执行/usr/bin/ru ...