我们知道,我们在做项目时候,用到的最多的无非就是查询,各种条件查询.这个时候,如果我们再采用纯粹的hql语句来通过if判断的话,效率就十分低下而且会有很多判断.
那么,hibernate在3以后,推出了一个很有意义的对象DetachedCriteria,通过这个类,我们可以得到Criteira对象.然后可以利用Restrictions,Projection等,构造各种条件.
而且支持多表连接,外键关联查询,忽略大小写等.很实用.
DetachedCriteria dc = DetachedCriteria.forClass(Employee.class); Criteria cri = dc.getExecutableCriteria(getSession()); cri.createAlias("department", "department"); if (currEmp.getRole().getRoleId() == FinalVariable.SIMPLE_RID) { cri.add(Restrictions.eq("empId", currEmp.getEmpId())); } else if (currEmp.getRole().getRoleId() == FinalVariable.DEP_MANAGER_RID) { if (emp != null) { if (emp.getEmpId() != null) { cri.add(Restrictions.eq("empId", emp.getEmpId())); } } cri.add(Restrictions.eq("department.depId", currEmp.getDepartment() .getDepId())); } else { if (emp != null) { if (emp.getEmpId() != null) { cri.add(Restrictions.eq("empId", emp.getEmpId())); } else if (emp.getDepartment().getDepId() != null) { cri.add(Restrictions.eq("department.depId", emp .getDepartment().getDepId())); } } cri.addOrder(Order.asc("department.depId")); } return cri.list();
下面贴上,我自己写的一个小例子:
其中,员工里面有个Department引用.这个时候如果我们想用department下面的depId,我们需要使用criteria的createAlias("","");方法,首先创建一个别名,这样就可以用外键去关联查询了,发送的sql语句都是关联的查询.很方便.
相关推荐
无论是在HQL中编写复杂的查询语句,还是使用Criteria API和Criteria Builder构造动态查询,都能显著提高开发效率并减少错误。对于处理一对多、多对一等关联关系,Hibernate也提供了便捷的API,使得关联对象的存取变...
### Hibernate-Criteria 模糊查询详解 在Java的持久化技术中,Hibernate作为ORM(对象关系映射)框架的一种,提供了强大的数据访问能力。而其中的`Criteria`接口更是为复杂的查询需求提供了一种灵活且功能强大的...
Criteria API基于面向对象的方式进行查询构建,可以动态地添加各种查询条件,包括等值比较、范围查询、模糊查询等,使得查询操作更加直观和易于管理。 ### 模糊查询的意义 模糊查询是数据库操作中常见的一种需求,...
在Java的持久化框架Hibernate中,Criteria API是一种用于构建动态查询的强大工具,它允许开发者以对象化的方式构建SQL语句,而无需直接编写SQL代码。本篇将详细讲解如何在Hibernate中利用Criteria查询来实现类似SQL...
Criteria API是Hibernate提供的一个高级查询接口,它允许开发者在运行时构建动态查询。Criteria查询是基于对象的,通过调用一系列方法来设置查询条件,这些条件在查询执行时被转化为对应的SQL语句。 2. **Criteria...
本资源“Hibernate QBC高级查询”聚焦于Hibernate Query by Criteria(QBC)的高级用法,旨在帮助开发者深入理解并熟练运用这一强大的查询机制。 Query by Criteria是Hibernate提供的另一种查询方式,与HQL...
Criteria API 提供了一种类型安全的方式来构建动态查询。它允许开发者通过编程的方式创建查询,而不需要直接写 SQL。例如,可以创建一个 Criteria 对象,然后添加各种限制条件、排序和分组,最后执行查询。对于多表...
Criteria API提供了一种更为灵活和强大的查询方式,它基于标准的Java对象模型来构建查询条件,支持动态创建查询条件。 **特点:** - **面向对象:** Criteria API完全基于对象,这使得它更加灵活和强大。 - **动态...
在探讨Hibernate中关于Criteria查询条件的选择时,我们深入解析了Criteria接口如何被用来构建复杂的查询语句,以及各种表达式如何被运用到这些查询中。以下是对文档中提及的各个知识点的详细阐述: ### Criteria...
除了基础的查询,Hibernate还支持连接查询、子查询、聚合函数等高级功能。例如,如果你需要根据用户的年龄进行分组并计算每个年龄段的用户数量,可以这样写: ```java String hql = "select age, count(*) from ...
Criteria API的优点在于代码可读性高,且支持动态构建查询条件。 ### 三、QBC(Query By Example) QBC是一种基于实例的查询方式,它允许你通过一个对象实例来定义查询条件。以下是一个使用QBC的例子: ```java ...
高级查询允许用户根据多种条件进行复杂的数据筛选,包括但不限于按字段排序、模糊搜索、范围查询、多条件组合查询等。在Java中,我们可以使用JPA(Java Persistence API)或Hibernate等ORM框架来实现高级查询。例如...
这些API允许开发者根据用户输入的条件动态构造SQL,从而实现动态查询。例如,可以基于用户选择的多个属性、范围条件或者组合条件进行过滤。 **Spring框架** Spring是Java企业级应用的全能框架,提供了依赖注入(DI...
1. **`Criteria`**:是Hibernate提供的一个接口,用于创建查询条件。它可以被看作是基于对象模型的SQL语句构建器。 2. **`Criterion`**:表示一个简单的查询条件,例如`age > 30`。 3. **`Restrictions`**:提供了一...
2. **Criteria查询** 提供了一种面向对象的查询方式,通过API构建查询条件,无需书写字符串查询。它支持动态构建查询,更易于代码维护。例如,使用Criteria查询同样可以获取年龄大于20的用户: ```java Criteria ...
- **动态构建查询**:在实际开发中,经常需要根据不同的条件动态构建查询语句。可以通过字符串拼接或者使用 Criteria API 实现。 ```java Criteria criteria = session.createCriteria(User.class); if (name !=...
除了HQL,Hibernate还提供了Criteria API,这是一种更动态的查询方式,适合在运行时构建查询。Criteria API基于Java对象,可以避免字符串拼接造成的潜在SQL注入问题。以下是一个简单的例子: ```java Session ...
Criteria API 是 Hibernate 提供的一种高级查询接口,它允许开发者创建动态查询。在Hibernate中,`Criteria`对象代表了一个SQL查询的构建块,而`Expression`对象则用于构建查询条件。下面我们将详细介绍`Expression`...
通过上述介绍可以看出,Hibernate Criteria API提供了一种灵活且强大的查询方式,不仅可以进行复杂的条件查询,还可以进行聚合查询等高级操作。此外,`DetachedCriteria`的使用让查询更加灵活,适用于多种应用场景。...
除了Criteria查询,还可以使用HQL(Hibernate Query Language)进行分页查询,HQL是Hibernate提供的面向对象的查询语言,语法类似SQL。以下是一个使用HQL分页查询的例子: ```java String hql = "from User"; Query...