• 7.Hibernate查询


    一:Hibernate可以使用的查询语言

      1.NativeSQL:本地语言(数据库自己的SQL语句)

      2.HQL:hibernate自带的查询语句,可以使用HQL语言,转换成具体的方言

      3.EJBQL:JPQL 1.0,可以认为是HQL的一个子集(重点)

      4.QBC:Query By Cretira

      5.QBE:Query By Example

    注意:  1 涵盖 2 涵盖 3 涵盖 4 涵盖 5

       EJBQL 是 HQL的子集,所以直接说是HQL也无可厚非

    HQL:

      举例:1.Query q = session.createQuery("from Topic t where t.category.id = 1");

         2.Query q = session.createQuery("from Msg m where m.topic.category.id = 1");

      注:Topic 和 Msg 大写,用到的是具体的类

    Query by Criteria(QBC):

      QBC(Query by Criteria) 查询方式是Hibernate提供的 "更加面向对象"的一种检索方式,

      QBC在条件查询上比HQL查询更为灵活,而且支持运行时动态生成查询语句

    在Hibernate 应用中使用QBC 查询通常经过三个步骤

      1.使用Session 实例的 createCriteria() 创建Criteria 对象

      2.使用工具类 Restrictions 的相关方法为 Criteria对象设置查询对象

      3.使用 Criteria 对象的list() 方法执行查询,返回查询结果

      注:1.表的连接 .createCriteria("category")  //多表查询

        2.可以使用DetachedCriterea  //先定义Criterea,再决定这个标准放到哪个实体中 // 好处:可以实现复用

     1 @Test
     2     public void testQBC() {
     3         Session session = sf.openSession();
     4         session.beginTransaction();
     5         //criterion 标准/准则/约束
     6         //很多查询条件 被封装成了 一个又一个的函数,等待被add 进 criterion约束 中,(更加面向对象)
     7         Criteria c = session.createCriteria(Topic.class) //from Topic
     8                      
     9                      .add(Restrictions.gt("id", 2)) //greater than    gt("id",2)相当于id > 2
    10                      .add(Restrictions.lt("id", 8)) //little than = id < 8
    11                      .add(Restrictions.like("title", "t_"))
    12                      .createCriteria("category")            //多表查询
    13                      .add(Restrictions.between("id", 3, 5)) //category.id >= 3 and category.id <=5
    14                      ;
    15         //DetachedCriterea    //先定义Criterea,再决定这个标准放到哪个实体中 // 好处:可以实现复用
    16         for(Object o : c.list()) {
    17             Topic t = (Topic)o;
    18             System.out.println(t.getId() + "-" + t.getTitle());
    19         }
    20         session.getTransaction().commit();
    21         session.close();
    22         
    23     }

    QBE(Query By Example)

      //QBE是通过样本对象的属性对查询作出限制了的QBC

      QBE查询就是检索有指定样本对象有相同属性值的对象,因此QBE查询的关键就是样本对象的创建,

      样本对象中的所有非空属性均将作为查询条件。

      QBE查询是QBC查询的功能子集,虽然QBE 没有 QBC 功能大,但是有些场合QBE使用起来更为方便

      

     1 @Test
     2     public void testQBE() {
     3         Session session = sf.openSession();
     4         session.beginTransaction();
     5         //和 QBC 相比,QBE 就是多了这个 Example,比QBC多了一重条件
     6         Topic tExample = new Topic();
     7         //'_'代表任意字符
     8         tExample.setTitle("T_");
     9 
    10         Example e = Example.create(tExample)
    11                     .ignoreCase().enableLike();
    12         Criteria c = session.createCriteria(Topic.class)
    13                      .add(Restrictions.gt("id", 2))
    14                      .add(Restrictions.lt("id", 8))
    15                      .add(e)
    16                      ;
    17                      
    18         
    19         for(Object o : c.list()) {
    20             Topic t = (Topic)o;
    21             System.out.println(t.getId() + "-" + t.getTitle());
    22         }
    23         session.getTransaction().commit();
    24         session.close();
    25         
    26     }

    注:QL 应该和 导航关系结合,共同为查询提供服务

      如:Query q = session.createQuery("from Topic t where t.category.id = 1");

      只有在Topic类中设置了导航,即Topic中要有category属性,并且设置了两者关系

    1 private Category category;
    2     @ManyToOne(fetch=FetchType.LAZY)
    3     public Category getCategory() {
    4         return category;
    5     }
    6     public void setCategory(Category category) {
    7         this.category = category;
    8     }

    才可以使用   t.category.id  来进行查询  

  • 相关阅读:
    What is the difference between google tag manager and google analytics?
    GetService<IMessageBoxService>() returned null.
    Using Google Consent Mode to Adjust Tag Behavior Based on Consent
    what are the values in _ga cookie?
    DEP019 System table or view is deprecated
    How to set the Google Analytics cookie only after another consent cookie is set and "true"?
    Tag Manager and gtag.js
    Using the OptanonWrapper Callback Function
    elk7.15.1版本收集nginx日志并用kibana图形化分析日志
    ELK分析Nginx日志和可视化展示
  • 原文地址:https://www.cnblogs.com/xuzekun/p/7390037.html
Copyright © 2020-2023  润新知