Hibernate createCriteria查询详解

本文转载自 : http://penghao122.javaeye.com/blog/80794 1、创建一个Criteria实例 net.sf.hibernate.Criteria这个接口代表对一个特定的持久化类的查询。Session是用来制造Criteria实例的工厂。

[java] view plaincopy

  1. Criteria crit = sess.createCriteria(Cat.class);
  2. crit.setMaxResults(50);
  3. List cats = crit.list();

2、缩小结果集范围 一个查询条件(Criterion)是net.sf.hibernate.expression.Criterion接口的一个实例。类

net.sf.hibernate.expression.Expression定义了获得一些内置的Criterion类型。

[csharp] view plaincopy

  1. List cats = sess.createCriteria(Cat.class)
  2. .add( Expression.like("name", "Fritz%") )
  3. .add( Expression.between("weight", minWeight, maxWeight))
  4. .list();
  5. 表达式(Expressions)可以按照逻辑分组.

[csharp] view plaincopy

  1. List cats = sess.createCriteria(Cat.class)
  2. .add( Expression.like("name", "Fritz%") )
  3. .add( Expression.or( Expression.eq( "age", new Integer(0) ), Expression.isNull("age")))
  4. .list();
  5. List cats = sess.createCriteria(Cat.class)
  6. .add( Expression.in( "name",new String[]{"Fritz","Izi","Pk"}))
  7. .add( Expression.disjunction()
  8. .add( Expression.isNull("age") )
  9. .add( Expression.eq("age", new Integer(0) ) )
  10. .add( Expression.eq("age", new Integer(1) ) )
  11. .add( Expression.eq("age", new Integer(2) ) ) ) )
  12. .list();

[csharp] view plaincopy

  1. 有很多预制的条件类型(Expression的子类)。有一个特别有用,可以让你直接嵌入SQL。

[java] view plaincopy

  1. List cats = sess.createCriteria(Cat.class)
  2. .add( Expression.sql("lower($alias.name) like lower(?)", "Fritz%", Hibernate.STRING))
  3. .list();

[csharp] view plaincopy

  1. 其中的{alias}是一个占位符,它将会被所查询实体的行别名所替代。

[csharp] view plaincopy

  1. (原文:The {alias} placeholder with be replaced by the row alias of the queried entity.)

[csharp] view plaincopy

  1. 3、对结果排序 可以使用net.sf.hibernate.expression.Order对结果集排序. <pre class="java" name="code">List cats = sess.createCriteria(Cat.class)
  2. .add( Expression.like("name", "F%")
  3. .addOrder( Order.asc("name"))
  4. .addOrder( Order.desc("age"))
  5. .setMaxResults(50)
  6. .list(); </pre>
  7. 4、关联(Associations) 你可以在关联之间使用createCriteria(),很容易地在存在关系的实体之间指定约束。
  8. <pre class="java" name="code">List cats = sess.createCriteria(Cat.class)
  9. .add( Expression.like("name", "F%")
  10. .createCriteria("kittens")
  11. .add( Expression.like("name","F%")
  12. .list(); </pre>
  13. 注意,第二个createCriteria()返回一个Criteria的新实例,指向kittens集合类的元素。 下面的替代形式在特定情况下有用。
  14. <pre class="csharp" name="code">List cats = sess.createCriteria(Cat.class)
  15. .createAlias("kittens", "kt")
  16. .createAlias("mate", "mt")
  17. .add(Expression.eqProperty("kt.name", "mt.name"))
  18. .list();</pre>
  19. (createAlias())并不会创建一个Criteria的新实例。) 请注意,前面两个查询中Cat实例所持有的kittens集合类并没有通过criteria预先过滤

!如果你希望只返回满足条件的kittens,你必须使用returnMaps()。

[java] view plaincopy

  1. List cats = sess.createCriteria(Cat.class)
  2. .createCriteria("kittens", "kt")
  3. .add( Expression.eq("name", "F%") )
  4. .returnMaps()
  5. .list();
  6. Iterator iter = cats.iterator();
  7. while ( iter.hasNext())
  8. {
  9. Map map = (Map) iter.next();
  10. Cat cat = (Cat) map.get(Criteria.ROOT_ALIAS);
  11. Cat kitten = (Cat) map.get("kt");
  12. }
  13. 5、动态关联对象获取(Dynamic association fetching) 可以在运行时通过setFetchMode()来改变关联对象自动获取的策略。
  14. <pre class="java" name="code">List cats = sess.createCriteria(Cat.class)
  15. .add( Expression.like("name", "Fritz%") )
  16. .setFetchMode("mate", FetchMode.EAGER)
  17. .list(); </pre>
  18. 这个查询会通过外连接(outer join)同时获得 mate和kittens。
  19. 6、根据示例查询(Example queries) net.sf.hibernate.expression.Example类许你从指定的实例创造查询条件。
  20. <pre class="java" name="code">Cat cat = new Cat();
  21. cat.setSex(‘F‘);
  22. cat.setColor(Color.BLACK);
  23. List results = session.createCriteria(Cat.class)
  24. .add( Example.create(cat) )
  25. .list();
  26. 版本属性,表示符属性和关联都会被忽略。默认情况下,null值的属性也被排除在外。 You can adjust how the Example is applied. 你可</pre>

以调整示例(Example)如何应用。 Example example = Example.create(cat) .excludeZeroes() //exclude zero valued properties

.excludeProperty("color") //exclude the property named "color" .ignoreCase() //perform case insensitive string comparisons

.enableLike(); //use like for string comparisons

[java] view plaincopy

  1. List results = session.createCriteria(Cat.class)
  2. .add(example)
  3. .list();
  4. 你甚至可以用示例对关联对象建立criteria。

List results = session.createCriteria(Cat.class) .add(Example.create(cat) )

.createCriteria("mate") .add(Example.create(cat.getMate())) .list();

时间: 2024-10-26 14:13:25

Hibernate createCriteria查询详解的相关文章

分享知识-快乐自己:Hibernate 中Criteria Query查询详解

1):Hibernate 中Criteria Query查询详解 当查询数据时,人们往往需要设置查询条件.在SQL或HQL语句中,查询条件常常放在where子句中. 此外,Hibernate还支持Criteria查询(Criteria Query),这种查询方式把查询条件封装为一个Criteria对象. 在实际应用中,使用Session的createCriteria()方法构建一个org.hibernate.Criteria实例,然后把具体的查询条件通过Criteria的add()方法加入到Cr

Hibernate延迟加载机制详解

摘自 http://blog.chinaunix.net/uid-20577907-id-3129234.html 1 延迟加载: 延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作. 在Hibernate中提供了对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载.下面我们就分别介绍这些种类的延迟加载的细节. A.实体对象的延迟加载: 如果想对实体对象使用延迟加载,必须要在实体的映射配置文

Hibernate 映射文件详解

Hibernate 映射文件详解 2010-09-02 19:03:33|  分类: Hibernate学习|举报|字号 订阅 Hibernate的持久化类和关系数据库之间的映射通常是用一个XML文档来定义的.该文档通过一系列XML元素的配置,来将持久化类与数据库表之间建立起一一映射.这意味着映射文档是按照持久化类的定义来创建的,而不是表的定义. 一.根元素:<hibernate-mapping>,每一个hbm.xml文件都有唯一的一个根元素,包含一些可选的属性 1)package:指定一个包

Hibernate Session &amp; Transaction详解

Hibernate Session & Transaction详解 HIbernate中的Session Session是JAVA应用程序和Hibernate进行交互时使用的主要接口,它也是持久化操作核心API, 注意这里的Session的含义,它与传统意思上web层的HttpSession并没有关系,Hibernate Session之与Hibernate,相当于JDBC Connection相对与JDBC. Session对象是有生命周期的,它以Transaction对象的事务开始和结束边界

hibernate enum映射详解

hibernate enum映射详解 在这里介绍注解的形式,如果想要了解XML配置的方式,可以自行查找相关资料. 例如以下Entity @Entity @Table(name = "t_user") public class User implements Serializable { /** * */ private static final long serialVersionUID = -9042615274714038279L; @Id @GeneratedValue(stra

Hibernate fetch属性详解

主要参考 :http://4045060.blog.51cto.com/4035060/1088025 一.hibernate抓取策略(单端代理的批量抓取fetch=select(默认)/join) 1)保持默认,同fetch="select" <many-to-one name="group" column="group_id" fetch="select" /> 另外发送一条select语句抓取当前对象关联实体

【Hibernate步步为营】--详解基本映射

Hibernate进行了分类整合发现其实Hibernate分为三大部分:核心对象.映射.HQL,这三大部分开发过程中最常使用,前几篇讨论了核心对象及对象之间的转换方法,接下来讨论Hibernate的映射使用方法. 一.基本用法 Hibernate一个重要的功能就是映射,它能够在对象模型和关系模型之间转换,是面向对象编程思想提倡使用的,使用映射程序开发人员只需要关心对象模型中代码的编写.对象和关系数据库之间的映射通常是由XML文档来定义的.这个映射文档被设计为易读的,并且可以手动修改.这种映射关系

mysql简单的单表查询详解

mysql简单的单表查询详解 MySQL的查询操作: 单表查询:简单查询 多表查询:连续查询 联合查询: 选择和投影: 投影:挑选要显示的字段 选择:挑选符合条件的行 投影:SELECT 字段1, 字段2, ... FROM tb_name;  SELECT * FROM tb_name; 选择:SELECT 字段1, ... FROM tb_name WHERE 子句; 布尔条件表达式 mysql> CREATE TABLE students (SID INT UNSIGNED AUTO_IN

MySQL_05-Select查询详解

SQL查询详解 1.Orderby a) Order by 字段 asc | desc b) 允许多字段排序: 先按第一个字段排序,如果不能区分,再使用第二个字段排序:以此类推 2.Limit(限制获得的记录数量) a) 语法: limit offset, row_count  (offset:偏移量,下标从0开始:row_count:总记录数).例如:limit 2,3 表示从第二条开始,取三条(即第2条到第4条记录) 3.Distinct a) 去除重复记录. b) 语法: select d