hibernate常用的两种查询hql和criteria

「爱情、让人受尽委屈。」 2022-09-21 01:05 210阅读 0赞

hibernate给人的感觉真的是又爱又恨,倒也不是说它不好用,主要还是因为精通它的人太少了加之复杂的查询也做不了,只能勉强做一些简单或者性能要求不是特别高的项目或产品。这次打算分享下我学习hibernate最常用的两种查询的心得。使用hibernate做复杂的查询一直存在争议,hibernate虽然也支持sql语句查询但是使用起来不是那么方便,也不是很好掌握。个人建议就是做复杂查询的时候就不要用hibernate了,可以使用ibatis或者直接使用jdbc来实现相应的功能。现在hibernate最常用的查询方式有两种分别是hql和criteria。

一 Criteria查询方式

这种查询方式比较面向对象一些,我也比较喜欢使用这种查询方式,因为它不用写任何的sql或者hql语句

  1. public void testCriteria() {
  2. Session ses=null;
  3. try{
  4. ses=HibernateUtil.getSession();
  5. Object[] t={1,2};
  6. Criteria c=ses.createCriteria(Article.class);
  7. c.add(Restrictions.in("id",t));
  8. List<Article> all=c.list();
  9. Iterator<Article> it=all.iterator();
  10. while(it.hasNext()){
  11. Article article=it.next();
  12. System.out.println(article.getName());
  13. }
  14. }catch(Exception e){
  15. e.printStackTrace();
  16. }finally{
  17. if(ses!=null){
  18. ses.close();
  19. }
  20. }
  21. }

目前criteria提供的查询条件已经可以满足基本的查询要求,但是复杂的查询还是不怎么行得通

二 hql的查询方式

这种方式和原生的sql语句有一定的差异,复杂度也高得多

  1. public void testHql() {
  2. Session ses=null;
  3. try{
  4. ses=HibernateUtil.getSession();
  5. String hql="from Article A where A.id>1";
  6. Query q=ses.createQuery(hql);
  7. List<Article> all=q.list();
  8. Iterator<Article> it=all.iterator();
  9. while(it.hasNext()){
  10. Article article=it.next();
  11. System.out.println(article.getName());
  12. }
  13. }catch(Exception e){
  14. e.printStackTrace();
  15. }finally{
  16. if(ses!=null){
  17. ses.close();
  18. }
  19. }
  20. }

hql对于稍微复杂的查询虽然可以应对,但是由于hql和原生的sql差异较大,书写的时候有一定困难

hibernate在很多方面有一统天下的势头,但是应对复杂的业务逻辑或者报表查询,hibernate的缺点却暴露的一览无遗,hibernate虽然支持sql查询但是用起来觉得很别扭.

发表评论

表情:
评论列表 (有 0 条评论,210人围观)

还没有评论,来说两句吧...

相关阅读

    相关 hibernate-hql查询

    select可以省略,但不建议这么做,尽量做到查询精确。 hql是面向对象的不管返回值还是条件都是对对象而言,不是数据库表。数据库中的一条记录就是一个对象。 1、根据条件查

    相关 Hibernate查询语言-HQL

    Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、