`
liweitsky
  • 浏览: 44557 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hibernate 动态查询

阅读更多
动态查询:简单的说就是多种条件的查询都写在一个方法中。
    有些朋友写查询拿用户来说,查名称、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实现动态SQL查询

    hibernate实现动态SQL查询,通过XML配置SQL,FREEMARKER 解析,生成要执行的SQL

    hibernate实现动态表查询的多种解决方案

    hibernate实现动态表查询的多种解决方案.自行整理的动太实现方案,总有一个适合你.

    sprint+struts+hibernate框架

    sprint+struts+hibernate框架+JPA j2ee源码,struts2 hibernate3.0

    hibernate动态分表

    NULL 博文链接:https://houjiang2100.iteye.com/blog/972641

    基于hibernate 通用查询框架,包含查询、分页列表 功能

    通用查询页面中的查询项、查询出的分页列表都是自动生成的。开发简便、快速,附件中是一套完整的demo和使用说明 支持全部Hql语法格式 Awake 后续功能扩展 1.XML格式数据输出,保证了ajax用户也可以使用Awake框架...

    通用查询框架(hibernate+Ajax+jstl)

    基于hibernate的开源通用查询框架: 1.支持全部hql语法 2.可以支持Ajax用的 xml数据结构,也可以支持jsp、jstl、struts等标签,根据配置不同的数据解析器,得到不同结构的数据。 3.集成完整的分页功能。 4....

    Hibernate 多表连接分页查询示范项目

    Hibernate 多表连接分页查询示范项目 Hibernate Criteria 多表连接 分页

    Spring Data JPA/Hibernate 运行期动态模型、动态实体建表、动态字段查询的方式

    涉及到动态生成表结构,动态生成模型实体类动态查询表字段等等,经过调研发现hibernate在这方面是很方便的,调用内置API就能完成系列操作,下面贴出核心代码: /** * @author cjbi */ public class DynamicDdlTest...

    spring hibernate实现动态替换表名(分表)的方法

    下面小编就为大家带来一篇spring hibernate实现动态替换表名(分表)的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Hibernate+中文文档

    14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9....

    Hibernate学习文档集合

    Hiberhate的增、删、改、查、动态、查询、分页.doc Hibernate的对应关系.doc Hibernate具体方法的实现.doc

    hibernate3.2中文文档(chm格式)

    14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9....

    HibernateAPI中文版.chm

    14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9....

    hibernate 教程

    Hibernate查询语言(Query Language), 即HQL 11.1. 大小写敏感性(Case Sensitivity) 11.2. from 子句 11.3. 联合(Associations)和连接(joins) 11.4. select子句 11.5. 统计函数(Aggregate ...

    Hibernate实战(第2版 中文高清版)

    第一部分 从Hibernate和EJB 3.0开始  第1章 理解对象/关系持久化   1.1 什么是持久化   1.1.1 关系数据库   1.1.2 理解SQL   1.1.3 在Java中使用SQL   1.1.4 面向对象应用程序中的持久化   1.2 范式不...

    Hibernate 中文 html 帮助文档

    14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9. 表达式 ...

    Hibernate中文详细学习文档

    14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9....

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     18.4.1 动态查询  18.4.2 集合过滤  18.4.3 子查询  18.4.4 本地SQL查询  18.4.5 查询结果转换器  18.5 查询性能优化  18.5.1 iterate()方法  18.5.2 查询缓存  18.6 小结  18.7 思考题 第19章 Hibernate...

    最全Hibernate 参考文档

    14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. select子句 14.5. 聚集函数 14.6. 多态查询 14.7. where子句 14.8. 表达式 14.9. order by子句 ...

Global site tag (gtag.js) - Google Analytics