`

Hibernate Criteria 组合查询条件

阅读更多
Configuration config = new Configuration();
SessionFactory sessionFactory = config.configure().buildSessionFactory();

Criteria criteria = session.createCriteria(MyPoJo.class);

//等于条件
//Restrictions.eq(String,object);
criteria.add(Restrictions.eq("UserID", 1001));

//其它条件以此类推
 Restrictions.gt 对应SQL中的 “field > value ” 表达式
 Restrictions.ge 对应SQL中的 “field >= value” 表达式
 Restrictions.lt 对应SQL中的 “field < value” 表达式
 Restrictions.le 对应SQL中的 “field <= value” 表达式
 Restrictions.between 对应SQL中的 “between” 表达式
 Restrictions.in 传入一个数组进行IN查询
 Restrictions.like 进行模糊查询
 Restrictions.ilike 不区分大小写的模糊查询


完整的例子
/**
	 * 查询诉讼费录入的记录信息,返回的对象是自定义工具类cn.net.withub.tz.common.Pager
	 * @param JLID
	 * @param jiaoKuanBM
	 * @param anJianBS
	 * @param jiaoKuanRBM
	 * @param yuJiaoJE
	 * @param chuangJianRBM
	 * @param SYS_TIME_START
	 * @param SYS_TIME_END
	 * @param is_Complete
	 * @param sortName 
	 * @param sortOrder
	 * @param pageNo
	 * @param pageSize
	 * @return 
	 */
	public Pager<TSpSsfIn> getSuSongFIn(String JLID, String jiaoKuanBM, String anJianBS,
			String jiaoKuanRBM, double yuJiaoJE, String chuangJianRBM,
			String SYS_TIME_START, String SYS_TIME_END,
			String yuJiaoSJ_START,String yuJiaoSJ_END,String queRenSJ_START,String queRenSJ_END, int is_Complete,
			String chuangJianR,String jiaoKuanR,String queRenR,String feiYongLX,int is_ZhiXing,
			String sortName, String sortOrder,int pageNo,int pageSize) {
		
		Pager<TSpSsfIn> pager = new Pager<TSpSsfIn>();//分页的装载工具类
		
		try {
			Criteria criteria = daoTool.createCriteria(TSpSsfIn.class);//创建Hibernate参数式查询
			 
			SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd");//定义日期格式化工具,用于查询条件增加
			
			//判断组装查询条件
			if(StringHelper.isNotEmpty(JLID)){
				criteria.add(Restrictions.eq("JLID", JLID));
			}
			
			if(StringHelper.isNotEmpty(jiaoKuanBM)){
				criteria.add(Restrictions.eq("jiaoKuanBM", jiaoKuanBM));
			}
			
			if(StringHelper.isNotEmpty(feiYongLX)){
				criteria.add(Restrictions.eq("feiYongLX", feiYongLX));
			}
			
			if(StringHelper.isNotEmpty(anJianBS)){
				criteria.add(Restrictions.eq("anJianBS", anJianBS));
			}
			
			if(StringHelper.isNotEmpty(jiaoKuanRBM)){
				criteria.add(Restrictions.eq("jiaoKuanRBM", jiaoKuanRBM));
			}
			
			if(yuJiaoJE != -1){
				criteria.add(Restrictions.eq("yuJiaoJE", yuJiaoJE));
			}
			
			if(StringHelper.isNotEmpty(yuJiaoSJ_START)){
				criteria.add(Restrictions.ge("yuJiaoSJ", Timestamp.valueOf(yuJiaoSJ_START + " 00:00:00")));
			}
			
			if(StringHelper.isNotEmpty(yuJiaoSJ_END)){
				criteria.add(Restrictions.le("yuJiaoSJ", Timestamp.valueOf(yuJiaoSJ_END + " 23:59:59")));
			}
			
			if(StringHelper.isNotEmpty(SYS_TIME_START)){ 
				criteria.add(Restrictions.ge("SYS_TIME", Timestamp.valueOf(SYS_TIME_START + " 00:00:00")));
			}
			
			if(StringHelper.isNotEmpty(SYS_TIME_END)){
				criteria.add(Restrictions.le("SYS_TIME", Timestamp.valueOf(SYS_TIME_END + " 23:59:59")));
			}
			
			if(StringHelper.isNotEmpty(queRenSJ_START)){
				criteria.add(Restrictions.ge("queRenJKRQ", Timestamp.valueOf(queRenSJ_START + " 00:00:00")));
			}
			
			if(StringHelper.isNotEmpty(queRenSJ_END)){
				criteria.add(Restrictions.le("queRenJKRQ", Timestamp.valueOf(queRenSJ_END + " 00:00:00")));
			}
			
			if(is_Complete != -1){
				criteria.add(Restrictions.eq("is_Complete", is_Complete));
			}
			
			if(is_ZhiXing != -1){
				criteria.add(Restrictions.eq("is_ZhiXing", is_ZhiXing));
			}
			
			if(StringHelper.isNotEmpty(chuangJianR)){
				criteria.createAlias("creator", "creator");//增加表关联并做查询操作(等同于在SQL中加入了两张表的直等关联,具体关联子表用什么字段是通过HRM.XML配置文件进行配置)
				criteria.add(Restrictions.ilike("creator.userName", chuangJianR,MatchMode.ANYWHERE));
			}
			
			if(StringHelper.isNotEmpty(queRenR)){
				criteria.createAlias("userInfo", "userInfo");//增加表关联并做查询操作
				criteria.add(Restrictions.ilike("userInfo.userName", queRenR,MatchMode.ANYWHERE));
			}
			
			if(StringHelper.isNotEmpty(jiaoKuanR)){
				criteria.add(Restrictions.ilike("jiaoKuanR", jiaoKuanR,MatchMode.ANYWHERE));
			}
			


			
			// 获取根据条件分页查询的总行数  
	        int rowCount = (Integer) criteria.setProjection(Projections.rowCount()).uniqueResult();  
	        criteria.setProjection(null);  
			
			//进行排序判断方式和需要排序的字段并加入
			if(StringHelper.isNotEmpty(sortName) && StringHelper.isNotEmpty(sortOrder)){
				if(sortOrder.equals("asc")){
					criteria.addOrder(Order.asc(sortName));
				}else if(sortOrder.equals("desc")){
					criteria.addOrder(Order.desc(sortName));
				}
			}
			
			//设置分页信息
			criteria.setFirstResult((pageNo - 1) * pageSize);  //从那条数据开始
	        criteria.setMaxResults(pageSize);  //获取条数
	  
	        criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY);  //只返回根对象,不加此限制结果将返回数组,包含根对象与关联对象    
	        List<TSpSsfIn> result = criteria.list(); //获取查询结果
	        
	        //装载查询结果
	        pager.setPageNo(pageNo);
	        pager.setPageSize(pageSize);
	        pager.setRowCount(rowCount);
	        pager.setResult(result);
			
			
		} catch (Exception e) {
			log.error("[SuSongFManagerImp.getSuSongFIn(String JLID, String jiaoKuanBM, String anJianBS," +
					"String jiaoKuanRBM, double yuJiaoJE, String chuangJianRBM," +
					"String SYS_TIME_START, String SYS_TIME_END, int is_Complete," +
					"String sortName, String sortOrder,int pageNo,int pageSize)]"+e.getMessage());
		}
		
		
		return pager;
	}
分享到:
评论

相关推荐

    Hibernate criteria基本操作

    Hibernate Criteria 是一种在Java应用程序中使用Hibernate ORM框架执行SQL查询的方式。它提供了一种面向对象的方式来构建查询,使得代码更加可读和易于维护。Criteria API 提供了多种方法来构建复杂的查询,包括添加...

    Hibernate_Criteria条件查询数据

    3. **组合条件**:除了单个条件外,还可以通过`Conjunction`(AND)和`Disjunction`(OR)来组合多个条件。例如,查找年龄大于30且城市为北京的用户: ```java Criteria crit = session.createCriteria(User.class...

    Hibernate的Criteria用法总结

    在Java持久层框架Hibernate中,Criteria API是一种动态构建SQL查询的方法,它允许开发者在运行时构建查询,提供了更面向对象的查询方式。本篇将详细阐述Hibernate Criteria API的使用。 首先,Criteria API由...

    Hibernate-Criteria 模糊查询

    1. **条件组合**:你可以使用`Expression`的`and`或`or`方法来组合多个查询条件,以满足更为复杂的查询逻辑。 ```java Expression expr1 = Restrictions.eq("name", "Erica"); Expression expr2 = Restrictions...

    hibernate criteria 分组 排序 关联

    在Hibernate中,使用`Criteria`进行查询时,可以通过添加排序条件来对结果集进行排序。`Criteria`提供了一个非常灵活的方式来实现这一点。 **示例代码**: ```java Criteria criteria = session.createCriteria...

    基于spring+hibernate的组合查询+分页组件

    通过这些方法,我们可以构建动态的、复杂的查询条件,比如使用Hibernate的Criteria API或者Query API,实现基于多个条件的组合查询。 分页组件在大型Web应用中是必不可少的,因为它可以帮助用户更有效地浏览大量...

    Hibernate的Criteria文档

    `Restrictions`还支持创建`Conjunction`(AND操作)和`Disjunction`(OR操作)的组合查询条件。此外,`Example`类允许根据一个对象实例创建查询条件,这对于基于对象属性的模糊匹配非常有用。 `Projection`则用于...

    hibernateCriteria的使用.docx

    在Java的持久化框架Hibernate中,Criteria API...通过组合不同的`Criterion`,我们可以构建出满足各种业务逻辑的查询条件,同时保持代码的可读性和可维护性。这使得Hibernate成为Java开发中处理数据库交互的强大工具。

    Hibernate中Criteria的用法详解

    在Java的持久化框架Hibernate中,Criteria API是一个强大的查询工具,它可以用来构建动态和复杂的查询。Criteria API的主要优点在于它的灵活性,允许开发者在运行时构建查询,而不必预先定义HQL(Hibernate Query ...

    java hibernate Criteria

    此外,还可以使用`and()`与`or()`来组合多个查询条件: ```java List&lt;Cat&gt; cats = sess.createCriteria(Cat.class) .add(Restrictions.like("name", "Fritz%")) .add(Restrictions.or( Restrictions.eq("age", ...

    Hibernate的MySql查询.rar

    Criteria API则提供了一种更加面向对象的查询方式,它允许我们构建查询条件并动态地组合它们。以下是如何使用Criteria API来获取所有用户: ```java Session session = HibernateUtil.getSessionFactory()....

    Hibernate中Criteria的完整用法

    在Java的持久层框架Hibernate中,Criteria API提供了一种面向对象的方式来执行数据库查询,使得开发者无需直接编写SQL语句即可实现复杂的数据检索。Criteria API的使用不仅提高了代码的可读性和可维护性,还能更好地...

    Hibernate的Criteria用法

    Hibernate的Criteria API是一种用于动态构建SQL查询的方法,无需手动编写HQL(Hibernate Query Language)语句。它提供了一种面向对象的方式来构建查询条件,使得代码更加简洁且易于维护。以下是对Criteria用法的...

    Hibernate中,利用Criteria查询容器实现sql的写法

    这篇博客文章“Hibernate中,利用Criteria查询容器实现sql的写法”可能详细讲解了如何使用Criteria API来构建复杂的查询条件,并将其转化为对应的SQL语句。 Criteria查询的基本使用步骤包括以下几个方面: 1. 创建...

    Hibernate中Criteria的用法

    而在Hibernate提供的多种查询方式中,Criteria API是一种非常灵活且强大的查询工具,它支持复杂的条件组合以及分组、排序等功能,为开发者提供了更为方便的查询手段。 #### 二、Criteria简介 Criteria是Hibernate...

    Hibernate中Criteria的使用

    5. **连接(Criterias)**:可以将多个Criteria对象组合在一起,形成更复杂的查询。例如,同时查询名字为"John"且年龄大于20岁的用户: ```java Criteria subCriteria = criteria.createCriteria("age"); ...

    Hibernate的HQL与Criteria资料

    4. **可组合性**:可以将多个Criteria对象组合在一起,形成复杂的查询结构。 5. **易于单元测试**:因为是程序化的查询,所以更容易在单元测试中模拟和控制。 HQL和Criteria API各有优势,选择哪种取决于具体场景。...

    Java_Hibernate QBC条件查询对比

    本篇文章将深入探讨Hibernate中的QBC(Query By Example)条件查询与传统的HQL(Hibernate Query Language)查询的对比,帮助开发者更好地理解和选择适合的查询方式。 QBC(Query By Example)是Hibernate提供的一...

Global site tag (gtag.js) - Google Analytics