Hibernate使用DetachedCriteria和Criteria查询
2014-12-18 14:40
519 查看
一。比较HQL和Criteria
HQL是Hibernate官方推荐的查询方式,涵盖了Criteria的功能,更加全面、灵活,对于熟悉SQL的开发者来说比后者直观许多,维护比较简单,语句执行效率也较高(速度上SQL>HQL>Criteria)。
Criteria则是面向对象的查询方式,毕竟HQL还是字符串拼接,不够OO。Criteria支持动态扩展条件,拼装方便。
动态条件查询,用Criteria更加合适,如果要对Hibernate做二次封装,也是用它更好扩展。但如果是不会变动的代码,比起HQL,Criteria反而需要写更多的代码,维护起来也更加困难。
HQL在编译的时候只当是普通的字符串,只有在运行的时候才会发现其中可能存在的bug(比如少了间隔的空格或是引号遗漏之类)。如果没有单元测试,粗心大意的话会浪费非常多的时间;而Criteria虽然也无法在编译时对字段名字打错这样的bug进行检查,但至少可以检查到其他如条件、连接这样的语法部分。
二。使用Criteria
下面是Criteria接口使用图
CriteriaSpecification 作为 父接口,下面提供了 Criteria和DetachedCriteria 。
1.创建方式:
Criteria 和 DetachedCriteria 的主要区别在于创建的形式不一样, Criteria 是在线的,所
以它是由 Hibernate Session 进行创建的;而 DetachedCriteria 是离线的,创建时无需
Session,DetachedCriteria 提供了 2 个静态方法 forClass(Class) 或 forEntityName(Name)
进行DetachedCriteria 实例的创建。 Spring 的框架提供了getHibernateTemplate
().findByCriteria(detachedCriteria) 方法可以很方便地根据DetachedCriteria 来返回查询结
果。
2.设置查询条件
使用 Criterion 和 Projection 设置查询条件。Criteria 提供了 add(Criterion criterion) 方法来
添加查询条件。
Criterion 接口的主要实现包括: Example 、 Junction 和 SimpleExpression 。
可以通过Restrictions工具类创建 Criterion,Restrictions提供大量静态方法,例如eq(),gt(),lt(),like()等。
3.查询
调用list()方法即可返回查询将诶过。
示例:
情景:查询某个名字的学生
HQL是Hibernate官方推荐的查询方式,涵盖了Criteria的功能,更加全面、灵活,对于熟悉SQL的开发者来说比后者直观许多,维护比较简单,语句执行效率也较高(速度上SQL>HQL>Criteria)。
Criteria则是面向对象的查询方式,毕竟HQL还是字符串拼接,不够OO。Criteria支持动态扩展条件,拼装方便。
动态条件查询,用Criteria更加合适,如果要对Hibernate做二次封装,也是用它更好扩展。但如果是不会变动的代码,比起HQL,Criteria反而需要写更多的代码,维护起来也更加困难。
HQL在编译的时候只当是普通的字符串,只有在运行的时候才会发现其中可能存在的bug(比如少了间隔的空格或是引号遗漏之类)。如果没有单元测试,粗心大意的话会浪费非常多的时间;而Criteria虽然也无法在编译时对字段名字打错这样的bug进行检查,但至少可以检查到其他如条件、连接这样的语法部分。
二。使用Criteria
下面是Criteria接口使用图
CriteriaSpecification 作为 父接口,下面提供了 Criteria和DetachedCriteria 。
1.创建方式:
Criteria 和 DetachedCriteria 的主要区别在于创建的形式不一样, Criteria 是在线的,所
以它是由 Hibernate Session 进行创建的;而 DetachedCriteria 是离线的,创建时无需
Session,DetachedCriteria 提供了 2 个静态方法 forClass(Class) 或 forEntityName(Name)
进行DetachedCriteria 实例的创建。 Spring 的框架提供了getHibernateTemplate
().findByCriteria(detachedCriteria) 方法可以很方便地根据DetachedCriteria 来返回查询结
果。
2.设置查询条件
使用 Criterion 和 Projection 设置查询条件。Criteria 提供了 add(Criterion criterion) 方法来
添加查询条件。
Criterion 接口的主要实现包括: Example 、 Junction 和 SimpleExpression 。
可以通过Restrictions工具类创建 Criterion,Restrictions提供大量静态方法,例如eq(),gt(),lt(),like()等。
3.查询
调用list()方法即可返回查询将诶过。
示例:
情景:查询某个名字的学生
public void testDetacheCriteria(){ Student s = new Student(); //测试学生实体类 DetachedCriteria dc = DetachedCriteria.forClass(Student.class); //创建实例 dc.add(Restrictions.eq("stuName", s.getStuName())); //设置查询条件 List<Student> stus = dc.getExecutableCriteria(session).list();//返回查询结果 }
相关文章推荐
- 灵活使用Hibernate的查询对象DetachedCriteria
- 灵活使用Hibernate的查询对象DetachedCriteria
- Hibernate里面如何使用DetachedCriteriaCriteria 实现多条件分页查询
- (hibernate查询)DetachedCriteria对象创建可以不需要使用session去创建
- Hibernate 中的 DetachedCriteria查询(所有使用到的类属性必须在映射文件中存在)
- Hibernate-Criteria查询(3)DetachedCriteria构造查询条件、命名查询、原生SQL、调用存储过程(使用JDBC)
- 灵活使用Hibernate的查询对象DetachedCriteria
- 关于Hibernate中fatch=eager的bag集合(一个java List)使用Criteria查询出现重复记录的问题
- 应用Hibernate3的DetachedCriteria实现分页查询
- Hibernate中DetachedCriteria的使用 (转载)
- 应用Hibernate3的DetachedCriteria实现分页查询
- Hibernate中DetachedCriteria的使用
- 求助Hibernate问题(我使用Criteria 查询数据库表时,当客户端调用到第3次就出现问题 )
- Hibernate中Criteria的使用(条件查询)
- 应用Hibernate3的DetachedCriteria实现分页查询
- Hibernate使用Criteria实现查询
- Hibernate3的DetachedCriteria使用
- Hibernate中DetachedCriteria的使用
- Hibernate3的DetachedCriteria使用
- Hibernate之DetachedCriteria动态条件查询