1. Hibernate的Criteria这个东东,我觉得挺好的,它用于一个对象(也就是一张表)的各种查询非常好用,像:模糊查询,比较等等。(第一个是自己的,第二种是老陈的笔记)
以下是摘抄自课本上:
使用Criteria首先创建Criteria对象,与创建Query对象的语法很相似,但需要传入的参数是对应实体类的类型对象。然后使用Restrictions对象的静态方法(包括like,ge,gt,le,in等)构造查询条件,并添加进Criteria对象中。其中,like方法构造一个模糊查询的条件,第一个参数是参数名,第二个参数是查询条件的值,第三个参数是关键字匹配的方式,可选的有MatchMode.ANYWHERE,MatchMode.End,MatchMode.START和MatchMode.EXACT(精确查询)。ge表示构造大于等于的查询条件,gt则是大于,le则是小于等于,lt则是小于。最后,还可以通过Criteria的addOrder方法指定查询的排序方式。同样,分页查询的两个方法Criteria对象也支持,所以一般构造复杂的查询方法时候,我们采用Criteria的方式。
For Example:
//得到全部招聘信息
public static List getAllJob(long cid,long jobTypeId,long pd,String keyWord)
{
Session session=HibernateSessionFactory.getSession();
Criteria c=session.createCriteria(Job.class);
//取别名
c.createAlias("jobtype","jobtype");
c.createAlias("city","city");
if(cid!=0)
{
c.add(Restrictions.eq("city.id",cid));
}
if(jobTypeId!=0)
{
c.add(Restrictions.eq("jobtype.id",jobTypeId));
}
if(pd!=0)
{
//得到calendar实例,默认为当前时间
Calendar calendar=Calendar.getInstance();
//当前的日期减少pd天
calendar.add(Calendar.DAY_OF_MONTH, (int)-pd);
//得到前pd天的日期
Date date=calendar.getTime();
c.add(Restrictions.gt("publishdate",date));
}
if(!"".equals(keyWord))
{
c.add(Restrictions.like("title", keyWord,MatchMode.ANYWHERE));
}
List list=c.list();
session.close();
return list;
}
2.对象查询
1)对象查询只能够查询一个对象。也就是说对象查询不支持
关联查询
2)对象查询非常适合于对同一张表进行多条件查询
3)criteria的使用格式:
Session session=HibernateSessionFactory.getSession();
Criteria c=session.createCriteria(Emp.class);//创建一个实例
double minPay=3000;
double maxPay=5000;
//c.add(Restrictions.like("ename", "A",MatchMode.ANYWHERE));
//c.add(Restrictions.between("sal",minPay, maxPay));
//c.add(Restrictions.eq("job", "CLERK"));
c.add(Restrictions.eq("dept.dname", "SALES"));
List<Emp> empList=c.list();//返回的是一个对象集合
//没有加约束条件
for(Emp row:empList)
{
System.out.println(row.getEname());
}
4)criterian返回的永远都是对象集合
5)我要说话:
Criteria 的一个属性是关于另外一个对象的引用。那么我们就要
为这个属性创建别名
Session session=HibernateSessionFactory.getSession();
Criteria c=session.createCriteria(Emp.class);//创建一个实例
double minPay=3000;
double maxPay=5000;
//c.add(Restrictions.like("ename", "A",MatchMode.ANYWHERE));
//c.add(Restrictions.between("sal",minPay, maxPay));
//c.add(Restrictions.eq("job", "CLERK"));
c.createAlias("dept", "dept");//取别名
c.add(Restrictions.eq("dept.dname", "SALES"));
List<Emp> empList=c.list();//返回的是一个对象集合
//没有加约束条件
for(Emp row:empList)
{
System.out.println(row.getEname());
}
分享到:
相关推荐
搜索功能通常涉及到条件查询,可以利用Hibernate3的Criteria API或者HQL动态构造查询语句,根据用户输入的关键词匹配数据库中的记录。搜索结果同样可以结合分页进行展示。 总的来说,这个"Struts2+Spring2+...
### Hibernate中的查询方式详解 #### 一、HQL查询(Hibernate Query Language) HQL是Hibernate提供的面向对象的查询语言,其语法与SQL相似但并非完全相同。HQL的一个显著优势在于它具有很好的跨数据库能力,这...
总结,"Hibernate 多表连接分页查询示范项目"是一个实用的示例,它展示了如何在实际应用中利用 Hibernate Criteria API 实现复杂查询和分页,对于学习和掌握 Hibernate 的高级特性和数据库操作技巧非常有帮助。...
在这个“springMVC+hibernate的条件查询加分页的demo”中,我们将探讨如何结合这两个框架实现动态的条件查询和分页功能。 首先,让我们了解一下SpringMVC中的条件查询。在SpringMVC中,通常通过Controller层接收...
本篇文章将深入探讨Hibernate中的QBC(Query By Example)条件查询与传统的HQL(Hibernate Query Language)查询的对比,帮助开发者更好地理解和选择适合的查询方式。 QBC(Query By Example)是Hibernate提供的一...
**hibernate多表查询详解** 在Java的持久化框架中,Hibernate是一个广泛使用的ORM(对象关系映射)工具,它允许开发者用面向对象的方式来处理数据库操作。在实际的业务场景中,数据往往不是孤立存在的,而是存在于...
《Hibernate查询条件查询详解》 Hibernate作为Java领域中广受欢迎的对象关系映射(ORM)框架,极大地简化了数据库操作。其强大的查询能力是其核心功能之一。本篇将深入探讨Hibernate的条件查询,帮助开发者更好地...
本文将深入探讨如何在Hibernate中利用查询条件创建List集合,这在处理复杂的数据筛选和聚合时尤其有用。 首先,让我们理解在Hibernate中创建List集合的基本概念。List集合是Java集合框架的一部分,它可以存储有序且...
在实际开发中,HQL关联查询的应用场景非常广泛,特别是在需要跨多个实体进行数据检索的情况下。例如,在电子商务系统中,我们需要获取用户信息及其相关的订单信息时,就可以利用HQL关联查询来简化这一过程。此外,当...
Criteria API则提供了一种更加面向对象的查询方式,它允许我们构建查询条件并动态地组合它们。以下是如何使用Criteria API来获取所有用户: ```java Session session = HibernateUtil.getSessionFactory()....
当我们需要进行更复杂的数据库查询时,Hibernate提供了丰富的高级查询功能,这正是“Hibernate的高级查询”这一主题的核心所在。 在Hibernate中,高级查询主要包括HQL(Hibernate Query Language)、Criteria API和...
5. **多态查询的实现**:Hibernate支持使用`DetachedCriteria`或`Criteria` API来进行多态查询,通过`createCriteria()`方法指定父类,并使用`add(Restrictions.in("property", values))`等方法来限制查询条件。...
在查询数据库时,递归查询意味着我们查询一个记录,然后根据该记录的某些属性再查询其关联的记录,这个过程可能反复进行,直到满足某个终止条件。 在Hibernate中,我们可以利用HQL(Hibernate Query Language)或 ...
如果你希望在不打开Session的情况下构建查询条件,可以使用DetachedCriteria: ```java DetachedCriteria detached = DetachedCriteria.forClass(User.class); detached.setProjection(Projections.property(...
Criteria API 是Hibernate提供的一种面向对象的查询方式,它允许开发者通过构建对象来表示查询条件,而不是直接编写SQL语句。这种查询方式更加符合面向对象编程的思想,降低了SQL语句的硬编码,提高了代码的可读性...
例如,我们可以为一个实体类定义多个HQL或SQL查询,根据实际需要选择执行哪一个。 五、FREEMARKER解析 FREEMARKER是一款强大的模板引擎,常用于Web应用中的视图渲染。在Hibernate中,我们可以利用FREEMARKER生成...
本实践项目结合了这两个框架,实现了基于Struts的前端展示和基于Hibernate的数据访问层,提供了分页和条件查询功能,这对于大型Web应用来说是非常基础且重要的。 **Struts框架** 是一个用于构建企业级Web应用程序的...
QBC查询方式的一个显著优点是其类型的检查性,可以减少运行时错误,同时也提供了更多的API来构造复杂的查询逻辑。 #### 总结 Hibernate的查询方式,特别是HQL和QBC,为Java开发者提供了强大而灵活的工具集,用以...
本篇文章将详细解析Hibernate中的几种主要查询方式,包括联表查询、分页查询、位置参数查询、占位符查询(冒号查询)以及统计查询,这些都是在实际开发中非常常见的需求。 首先,我们来看**联表查询**。在Hibernate...