今天做完了一个用hibernate完成的动态组合查询,现在总结了一些常用的方法,大家一起交流一下;
现在有一个用户的名字:username 年龄 age为查询条件:
第一种:hql的方式
public list findUserInfo(String name ,int age) throws Exception{
StringBuffer hqlstr=new StringBuffer("from User u");
if(name!=null) hqlstr.append("where lower(u.username) like:username");
if(age!=0 && username!=null) hqlste.append("and u.age=:age");
if(age!=0&&username==null) hqlstr.append("where u.age=:age");
Query query=getSession.createQuery(hqlstr.toString());
if(username!=null)query.getString("username",name.toLowerCase());
if(age!=0)query.setInteger("age",age);
return query.list();
}
当然这种方法比较繁琐,我们可以用QBC和QBE的方法来简化程序:
第二中:QBC的方式
public list findUserInfo(String name ,int age) throws Exception{
Criteria criter=session.createCrirtia(User.class);
if(username!=null){
criter.add(Expression.ilike("username",username.toLowercase(),MacthMode.ANYWHERE));
if(age!=0)
criter.add(Excepression.eq("age"),newInterger(age));
return criter.list();
}
第三种:QBE的方式:
public list findUserInfo(String name ,int age) throws Exception{
Example exa=Example.create(MatchMode);
exa.ignoreCase().enableLike(MatchMode.ANYWHERE);
exa.excludeZeroes();
Criteria criter=getSession.createCrirtia(User.class).add(exa);
}
当我们需要完成上面情况的查询时候,可以采用下面的两种方法来执行.
分享到:
相关推荐
在Hibernate中,我们通常使用HQL(Hibernate Query Language)或Criteria API进行查询,但这些方式并不支持复杂的动态查询。为了实现动态SQL,我们可以借助于Hibernate的QBC(Query By Criteria)和Criteria API,...
【hibernate动态分表】是一种数据库设计策略,主要用于处理大数据量的问题,通过将数据分散到多个物理表中,以实现水平扩展,提高查询效率,减轻单表的压力。在Java Web开发中,Hibernate作为一款流行的ORM(对象...
开发者可以通过字符串拼接动态生成HQL语句,实现动态查询。 2.3 Criteria与HQL结合 在复杂场景下,可以将Criteria与HQL结合,以达到更灵活的查询效果。例如,使用Criteria构造基本查询,然后用HQL处理更复杂的部分...
使用Hibernate時,即使您不了解SQL的使用與撰寫,也可以使用它所提供的API來進行SQL語句查詢,org.hibernate.Criteria對SQL進行封裝,您可以從Java物件的觀點來組合各種查詢條件,由Hibernate自動為您產生SQL語句,...
【hibernate动态数据库进化版】是一个关于Java持久层框架Hibernate深入学习的主题,它主要探讨了如何在实际项目中让Hibernate更加灵活地适应不同的数据库环境,实现动态的SQL生成和执行。这一进化的版本旨在提高开发...
2. **动态绑定参数**:为了增加查询的灵活性,Hibernate允许在HQL查询中动态绑定参数。有两种主要的参数绑定形式: - 使用问号(`?`)作为占位符,然后通过`setXXX()`方法绑定具体值。例如,按学生名及年龄查询...
6. **Maven Webapp:** 提到的"curd2 Maven Webapp"可能是指一个使用Maven构建的Web应用程序,其中包含了一个名为"curd2"的模块,这个模块可能包含了上述关于Hibernate CRUD操作和动态SQL的实现。 综上所述,这个...
使用Criteria,你可以动态地构建查询,如下: ```java Criteria criteria = session.createCriteria(User.class); criteria.setProjection(Projections.property("username")); List<String> usernames = criteria....
Hibernate是一款强大的对象关系映射(ORM)框架,它允许开发者使用...以上就是关于Hibernate自定义查询的主要知识点,理解并熟练运用这些技术,可以提升你在数据库操作方面的专业素养,更好地应对各种复杂的业务需求。
无论是在HQL中编写复杂的查询语句,还是使用Criteria API和Criteria Builder构造动态查询,都能显著提高开发效率并减少错误。对于处理一对多、多对一等关联关系,Hibernate也提供了便捷的API,使得关联对象的存取变...
Criteria API则提供了一种更加面向对象的查询方式,它允许我们构建查询条件并动态地组合它们。以下是如何使用Criteria API来获取所有用户: ```java Session session = HibernateUtil.getSessionFactory()....
3. **动态类型**:在查询时,Hibernate可以处理动态类型,这意味着我们可以在运行时决定查询的具体类型,这得益于Java的动态类型特性。 4. **集合的多态处理**:在映射文件或注解中,可以使用`<one-to-many>`或`...
Criteria API 提供了一种类型安全的方式来构建动态查询。它允许开发者通过编程的方式创建查询,而不需要直接写 SQL。例如,可以创建一个 Criteria 对象,然后添加各种限制条件、排序和分组,最后执行查询。对于多表...
通过在`findByPage`和`findByOrder`方法中传入HQL和参数,可以实现动态查询。HQL中的占位符(如`:param1`)对应于传递的参数,通过`setParameter`方法设置这些参数值。 总结,Hibernate通用查询为Java开发者提供了...
本文将详细介绍Hibernate的五种查询方式,包括HQL查询、Criteria方法、动态查询DetachedCriteria、例子查询、SQL查询以及命名查询,以满足不同场景下的需求。 1. HQL查询: Hibernate Query Language(HQL)是一种...
**Hibernate查询方式详解** 在Java世界中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本教程将深入探讨Hibernate 3.x版本中的查询方式,包括基本查询、HQL(Hibernate Query ...
关于数据库连接,Hibernate使用连接池来高效管理数据库连接。连接池在初始化时预创建一定数量的数据库连接,并在应用需要时分配,用完后归还,避免了频繁的连接创建和关闭带来的性能开销。Hibernate支持多种连接池...
### Hibernate中的查询方式详解 #### 一、HQL查询(Hibernate Query Language) HQL是Hibernate提供的面向对象的查询语言,其语法与SQL相似但并非完全相同。HQL的一个显著优势在于它具有很好的跨数据库能力,这...
同时,HQL支持动态查询,可以根据参数动态构造查询语句,适合于复杂或动态的查询需求。 - **基本结构**:HQL查询通常以`from`开始,后面跟着实体类的名称。可以使用`select`指定返回的结果,`where`后跟查询条件,`...
本篇将详细探讨"Hibernate参数查询通用方法"这一主题,以及如何通过Dao层实现高效、灵活的数据查询。 在Hibernate中,参数查询通常涉及到HQL(Hibernate Query Language)或者使用Criteria API。这两种方式都可以...