`
jaesonchen
  • 浏览: 311577 次
  • 来自: ...
社区版块
存档分类
最新评论

hibernate Criteria

 
阅读更多
Session session = null;
try {
	session = HibernateSessionFactory.getSession();
	session.beginTransaction();
			
	//当session.createCriteria(实体类.class) 就会产生一条select所有列from 表SQL语句,
	//查询实体类对应数据表的所有记录,然后我们就可以在这个Criteria对象上进行条件查询、
	//分页查询、多表关联查询、投影查询、子查询等一系列操作
	Criteria criteria = session.createCriteria(User.class);
	List<User> results = criteria.list();
	System.out.println(results.size());
			
	//对查询添加条件对象Criterion
	criteria = session.createCriteria(User.class);
	criteria.add(Restrictions.like("userName", "jaeson%"));
	results = criteria.list();
	System.out.println(results.size());			
	//AND或OR使用LogicalExpression限制条件
	criteria = session.createCriteria(User.class);
	Criterion zipCode = Restrictions.gt("address.zipCode", 2000);
	Criterion userName = Restrictions.like("userName","jaeson%");
	//对于多个查询条件,Restrictions提供了逻辑组合查询方法
	//and(Criterion lhs, Criterion rhs) 用于生成多个条件and关系SQL语句; 
	//or(Criterion lhs, Criterion rhs) 用于生成多个条件or关系SQL语句;
	LogicalExpression orExp = Restrictions.or(zipCode, userName);
	criteria.add( orExp );
	//分页操作 firstResult和maxResults 
	criteria.setFirstResult(0);
	criteria.setMaxResults(10);
	//排序操作 Order 
	criteria.addOrder(Order.desc("userName"));
	criteria.addOrder(Order.asc("id"));
	results = criteria.list();
	System.out.println(results.size());
			
	//多表关联操作 createAlias和createCriteria 
	//Criteria接口提供createAlias 和 createCriteria 两组方法用于完成多表关联查询。
	//createAlias(String associationPath, String alias) 采用内连接关联。
	//createAlias(String associationPath, String alias, int joinType) 可以通过joinType指定连接类型。
	//createCriteria(String associationPath) 采用内连接关联(返回新的Criteria对象)。
	//createCriteria(String associationPath, int joinType) 可以通过joinType指定关联类型(返回新的Criteria对象 )。 
			
	//方法一:使用createCriteria方法
	criteria = session.createCriteria(User.class);
	//通过User类的department属性返回新的Criteria
	Criteria criteria2 = criteria.createCriteria("department");
	criteria2.add(Restrictions.eq("deptName", "行政部"));
	results = criteria.list();
	System.out.println(results.size());
			
	//方法二:使用createAlias 方法
	//使用createAlias方法不会像createCriteria那样返回一个新的Criteria对象,alias只是对关联表进行别名设置,通过别名引用设置属性。 
	criteria = session.createCriteria(User.class);
	//进行表关联,设置User类的属性department的别名
	criteria.createAlias("department", "d");
	criteria.add(Restrictions.eq("d.deptName", "行政部"));
	results = criteria.list();
	System.out.println(results.size());
			
	//投影、分组查询 Projection 
	//在实际开发中,进行查询是:可能只需要返回表中的指定列信息(投影)或者进行统计查询(count、avg、sum、min、max),
	//Criteria接口提供setProjection(Projection projection)方法用于实现投影查询操作。 
	//org.hibernate.criterion.Projections工厂类用于返回Projection投影查询对象。
	criteria = session.createCriteria(User.class);
	//通过Projections.property指定查询哪些属性
	criteria.setProjection(Projections.projectionList()
				.add(Projections.property("id"))
				.add(Projections.property("userName")));
	List<Object []> list = criteria.list();
	System.out.println(((Object []) list.get(0))[1]);
			
	//Projections提供了分组函数的查询方法: 
	//rowCount() 查询记录总数量;
	//count(String propertyName) 统计某列数量;
	//countDistinct(String propertyName) 统计某列数量(排除重复);
	//avg(String propertyName) 统计某列平均值; 
	//sum(String propertyName) 对某列值求和;
	//max(String propertyName) 求某列最大值; 
	//min(String propertyName) 求某列最小值。
	criteria = session.createCriteria(User.class);
	criteria.setProjection(Projections.rowCount());
	Long count = (Long) criteria.uniqueResult();
	System.out.println(count);
			
	criteria = session.createCriteria(User.class);
	criteria.setProjection(Projections.projectionList()
				.add(Projections.groupProperty("department"))
				.add(Projections.count("id")));
	List<Object []> listGourp = criteria.list();
	Object [] countarr = (Object []) listGourp.get(0);
	System.out.println(countarr[1] + "=" + ((Department) countarr[0]).getDeptName());
			
	session.getTransaction().commit();
			
} catch(Exception e) {
	e.printStackTrace();  
	session.getTransaction().rollback();  
} finally {  
	HibernateSessionFactory.closeSession();  
}

  * Criteria:
  * org.hibernate.criterion.Criterion是Hibernate提供的一个面向对象查询条件接口,一个单独的查询就是Criterion接口的一个实例,
    用于限制Criteria对象的查询,在Hibernate中Criterion对象的创建通常是通过Restrictions 工厂类完成的。
    org.hibernate.criterion.Order用于排序操作, Criteria 接口提供addOrder(Order order)用于生成排序SQL。


  * Restrictions 运算符 含义:
    =      Restrictions.eq() 等于 
    <>    Restrictions.not(Exprission.eq()) 不等于 
    >      Restrictions.gt() 大于 
    >=    Restrictions.ge() 大于等于
    <      Restrictions.lt() 小于 
    <=    Restrictions.le() 小于等于 
    is null           Restrictions.isnull() 等于空值 
    is not null     Restrictions.isNotNull() 非空值 
    like    Restrictions.like() 字符串模式匹配 
    and   Restrictions.and() 逻辑与
    and   Restrictions.conjunction() 逻辑与 
    or      Restrictions.or() 逻辑或 
    or      Restrictions.disjunction() 逻辑或 
    not    Restrictions.not() 逻辑非 
    in(列表)       Restrictions.in() 等于列表中的某一个值

 

分享到:
评论

相关推荐

    Hibernate criteria基本操作

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

    hibernateCriteria查询

    ### Hibernate Criteria 查询详解 #### 一、概述 Hibernate Criteria 查询是一种强大的对象化查询方式,它为开发者提供了一种灵活而直观的方式来构建复杂的查询逻辑。与传统的SQL查询相比,Criteria查询更加面向...

    Hibernate Criteria 排序的問題

    ### Hibernate Criteria 排序问题详解 #### 一、前言 在使用Hibernate进行数据库操作时,经常需要对查询结果进行排序处理。对于简单的查询场景,使用HQL(Hibernate Query Language)即可轻松实现排序功能;但对于...

    hibernate criteria的使用方法

    ### Hibernate Criteria 使用方法详解 #### 一、简介 Hibernate 是一款非常流行的 Java 持久层框架,它简化了对象关系映射(ORM)过程中的许多复杂性。在 Hibernate 中,Criteria API 提供了一种类型安全的方式来...

    hibernate criteria 分组 排序 关联

    ### Hibernate Criteria 分组、排序与关联查询详解 #### 标题与描述理解 - **标题**:“hibernate criteria 分组 排序 关联”这一标题明确了本文将围绕Hibernate Criteria API进行分组、排序以及关联查询的具体...

    Hibernate Criteria 完全使用

    **Hibernate Criteria 完全使用详解** Hibernate Criteria API 是 Hibernate 框架中一个强大的查询工具,它提供了一种面向对象的方式来构建SQL查询,使得开发者无需直接编写SQL语句,即可进行复杂的数据库操作。...

    Hibernate Criteria用法大全.docx

    【Hibernate Criteria 用法详解】 Hibernate Criteria API 是一种面向对象的查询方式,它提供了一种比HQL(Hibernate Query Language)更为简洁且直观的查询手段。通过Criteria API,开发者可以构建复杂的查询条件...

    Hibernate Criteria

    NULL 博文链接:https://chenlinbo.iteye.com/blog/335677

    Hibernate的Criteria用法总结

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

    hibernateCriteria的使用.docx

    在Java的持久化框架Hibernate中,Criteria API是一种用于构建动态查询的强大工具,它允许开发者以编程方式构建查询,而不是直接写SQL语句。下面将详细解释Criteria API的使用及其相关概念。 1. Query By Example ...

    Criteria hibernate

    **标题:“Criteria Hibernate”** **描述:** 在Java开发中,Hibernate是一个非常流行的持久化框架,它简化了数据库操作,使开发者能够用面向对象的方式来处理数据。本篇内容将聚焦于Hibernate中的Criteria查询,...

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

    在Java的持久化框架Hibernate中,Criteria API是一种用于构建动态查询的强大工具,它允许开发者以对象化的方式构建SQL语句,而无需直接编写SQL代码。本篇将详细讲解如何在Hibernate中利用Criteria查询来实现类似SQL...

    java hibernate Criteria

    ### Java Hibernate Criteria 使用详解 #### 一、简介与应用场景 在Java开发中,特别是涉及到数据库操作时,Hibernate作为一款优秀的对象关系映射(ORM)工具,提供了多种查询方式,其中包括了HQL(Hibernate ...

    hibernate如何使用criteria联合查询 group by 的语句

    这个案例是根据分组查询,并且得到每组的条数,不懂得可以q我:1710086675,欢迎认识更多新朋友

    hibernate基础jar包

    - hibernate-core.jar:这是Hibernate的核心库,包含了实体管理、会话工厂、查询语言(HQL和Criteria API)等关键功能。 - hibernate-entitymanager.jar:提供JPA(Java Persistence API)支持,允许开发者遵循...

    Criteria(hibernate3.0).rar_Criteria java_criteria Hibernate_hibe

    《Hibernate 3.0 Criteria API详解》 在Java持久化框架Hibernate中,Criteria API是一种强大的查询工具,它允许开发者以面向对象的方式构建SQL查询,从而避免了直接编写SQL语句的繁琐工作。Criteria API在Hibernate...

    Hibernate中Criteria的用法

    ### Hibernate中Criteria的用法详解 #### 一、概述 在Java开发中,Hibernate作为一款优秀的对象关系映射(ORM)框架,极大地简化了数据库操作的复杂性。而在Hibernate提供的多种查询方式中,Criteria API是一种...

    hibernate-Criteria

    ### Hibernate Criteria API详解 #### 一、概述 Hibernate Criteria API是一种强大的查询机制,它提供了面向对象的查询方式,使得开发人员能够更容易地构建复杂的查询。本文将深入探讨Hibernate Criteria API的...

Global site tag (gtag.js) - Google Analytics