动态查询:简单的说就是多种条件的查询都写在一个方法中。
有些朋友写查询拿用户来说,查名称、id、特征,一下写三个方法,如果又查名称又查特征那么还要补充方法;采用动态查询以后所有的这些查询都可以写在一个方法中,在这儿我结合一下hibernate谈一下动态查询。
第一种动态查询:自己封装sql
public user getUserByAllKey(String name,
String id,String tag) {
StringBuffer sb = new StringBuffer();
sb.append("from Userd where u.deleteFlag='1'");
if(name != null && !"".equals(nName)){
sb.append(" and ( name like '%"+name+"%')");
}
if((id != null) && !"0".equals(id) && !"".equals(id)){
int dir = Integer.parseInt(id);
sb.append(" and d.id in(select direc.id from FileAttribute as f where f.audit=1 and f.deleteFlag = 1 and f.sort.id ="+sortId+")");
}
String subDirIdt = null;
if(tag!= null && !"".equals(subDirId)){
subDirIdt = ","+tag+",";
sb.append(" and CONCAT(CONCAT(',',d.tag),',') like '%"+subDirIdt+"%'");
}
sb.append(" order by d.createDate desc");
return searchPaginated(sb.toString());
}
第二种:采用hibernate封装
1、创建一个Criteria实例
net.sf.hibernate.Criteria这个接口代表对一个特定的持久化类的查询。Session是用来制造Criteria实例的工厂。
Criteria crit = sess.createCriteria(Cat.class);
crit.setMaxResults(50);
List cats = crit.list();
2、缩小结果集范围
一个查询条件(Criterion)是net.sf.hibernate.expression.Criterion接口的一个实例。类net.sf.hibernate.expression.Expression定义了获得一些内置的Criterion类型。
List cats = sess.createCriteria(Cat.class)
.add( Expression.like("name", "Fritz%") )
.add( Expression.between("weight", minWeight, maxWeight) )
.list();
表达式(Expressions)可以按照逻辑分组.
List cats = sess.createCriteria(Cat.class)
.add( Expression.like("name", "Fritz%") )
.add( Expression.or(
Expression.eq( "age", new Integer(0) ),
Expression.isNull("age")
) )
.list();
List cats = sess.createCriteria(Cat.class)
.add( Expression.in( "name", new String[] { "Fritz", "Izi", "Pk" } ) )
.add( Expression.disjunction()
.add( Expression.isNull("age") )
.add( Expression.eq("age", new Integer(0) ) )
.add( Expression.eq("age", new Integer(1) ) )
.add( Expression.eq("age", new Integer(2) ) )
) )
.list();
3、对结果排序
可以使用net.sf.hibernate.expression.Order对结果集排序.
List cats = sess.createCriteria(Cat.class)
.add( Expression.like("name", "F%")
.addOrder( Order.asc("name") )
.addOrder( Order.desc("age") )
.setMaxResults(50)
.list();
再此只是简单的介绍了下hibernate的动态查询的用法,自己封装要很仔细,如果采用hibernate封装需要对hibernate有一定了解,有兴趣的朋友可以去看看hibernate中的关联,以及示例查询等
分享到:
相关推荐
在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动态数据库进化版】是一个关于Java持久层框架Hibernate深入学习的主题,它主要探讨了如何在实际项目中让Hibernate更加灵活地适应不同的数据库环境,实现动态的SQL生成和执行。这一进化的版本旨在提高开发...
2. **动态绑定参数**:为了增加查询的灵活性,Hibernate允许在HQL查询中动态绑定参数。有两种主要的参数绑定形式: - 使用问号(`?`)作为占位符,然后通过`setXXX()`方法绑定具体值。例如,按学生名及年龄查询...
Hibernate 支持HQL(Hibernate Query Language),这是一种类似于SQL的语言,用于在对象级别进行查询。此外,Hibernate3.0版本引入了许多新特性,比如Criteria API,增强了对JPQL的支持,以及对缓存机制的改进。 ...
在Hibernate中,FreeMarker可以用来动态构建HQL(Hibernate Query Language)语句,HQL是Hibernate提供的面向对象的查询语言,与SQL类似但更贴近Java对象。通过FreeMarker,开发者可以在运行时根据条件生成不同HQL,...
使用Criteria,你可以动态地构建查询,如下: ```java Criteria criteria = session.createCriteria(User.class); criteria.setProjection(Projections.property("username")); List<String> usernames = criteria....
Criteria API则提供了一种更加面向对象的查询方式,它允许我们构建查询条件并动态地组合它们。以下是如何使用Criteria API来获取所有用户: ```java Session session = HibernateUtil.getSessionFactory()....
无论是在HQL中编写复杂的查询语句,还是使用Criteria API和Criteria Builder构造动态查询,都能显著提高开发效率并减少错误。对于处理一对多、多对一等关联关系,Hibernate也提供了便捷的API,使得关联对象的存取变...
Criteria API是Hibernate提供的另一种查询方式,它提供了更加面向对象的API,可以动态构建查询条件。下面是一个使用Criteria API的例子: ```java Session session = sessionFactory.openSession(); Criteria ...
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中的分页查询功能以及它如何处理数据库连接,帮助你更有效地管理大数据量的查询操作。 首先,我们来看一下什么是分页查询。在Web应用中,当用户需要浏览大量数据时,一次性加载所有数据不仅...
本篇将详细探讨"Hibernate参数查询通用方法"这一主题,以及如何通过Dao层实现高效、灵活的数据查询。 在Hibernate中,参数查询通常涉及到HQL(Hibernate Query Language)或者使用Criteria API。这两种方式都可以...
### Hibernate中的查询方式详解 #### 一、HQL查询(Hibernate Query Language) HQL是Hibernate提供的面向对象的查询语言,其语法与SQL相似但并非完全相同。HQL的一个显著优势在于它具有很好的跨数据库能力,这...