zoukankan      html  css  js  c++  java
  • Hibernate查询_HQL_EJBQL_QBC_QBE

    查询按功能强弱可以分为以下几种:
    Native SQL > HQL > EJBQL > QBC > QBE

    1、Native SQL
    Native SQL为数据库系统本身的SQL,里面包含了一些特有的函数等,功能也最为强大。
    如:

     1    @Test
     2    public void testHQL_34() {
     3        Session session = sf.openSession();
     4        session.beginTransaction();
     5        //下面查询使用的函数是Session的createSQLQuery
     6        SQLQuery q = session.createSQLQuery("select * from category limit 2,4").addEntity(Category.class);
     7        List<Category> categories = (List<Category>)q.list();
     8        for(Category c : categories) {
     9            System.out.println(c.getName());
    10        }
    11        session.getTransaction().commit();
    12        session.close();
    13        
    14    }

    2、HQL
    Hibernate提供的面向对象查询语言。
    如:

     1    @Test
     2    public void testHQL_02() {
     3        Session session = sf.openSession();
     4        session.beginTransaction();
     5        //Category是对象名而不是数据表名
     6        Query q = session.createQuery("from Category c where c.name > 'c5'");
     7        List<Category> categories = (List<Category>)q.list();
     8        for(Category c : categories) {
     9            System.out.println(c.getName());
    10        }
    11        session.getTransaction().commit();
    12        session.close();
    13        
    14    }

    3、EJBQL
    与HQL类似,是HQL的一个子集

    4、QBC
    Query By Criteria,即带约束/条件的查询
    如:

     1    @Test
     2    public void testQBC() {
     3        Session session = sf.openSession();
     4        session.beginTransaction();
     5        //criterion 标准/准则/约束
     6        Criteria c = session.createCriteria(Topic.class) //from Topic
     7                     
     8                     .add(Restrictions.gt("id", 2)) //greater than = id > 2
     9                     .add(Restrictions.lt("id", 8)) //little than = id < 8
    10                     .add(Restrictions.like("title", "t_"))
    11                     .createCriteria("category")
    12                     .add(Restrictions.between("id", 3, 5)) //category.id >= 3 and category.id <=5
    13                     ;
    14
    15        //DetachedCriterea
    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    }

    5、QBE
    Query By Example
    如:

     1    @Test
     2    public void testQBE() {
     3        Session session = sf.openSession();
     4        session.beginTransaction();
     5        Topic tExample = new Topic();
     6        tExample.setTitle("T_");
     7        
     8        //创建一个例子对象,然后设置其相应的属性
     9        //QBE仅适合于给特定值的查询
    10        Example e = Example.create(tExample)
    11                    .ignoreCase().enableLike();
    12        //QBC除了添加自己的条件,最后将例子对象e也当成条件添加进来
    13        //QBC可以添加给特定值的条件,也可添加给了一定范围的条件
    14        Criteria c = session.createCriteria(Topic.class)
    15                     .add(Restrictions.gt("id", 2))
    16                     .add(Restrictions.lt("id", 8))
    17                     .add(e)
    18                     ;
    19        //from Topic t where t.id>2 and t.id<8 and t.title like 'T_'
    20                     
    21        
    22        for(Object o : c.list()) {
    23            Topic t = (Topic)o;
    24            System.out.println(t.getId() + "-" + t.getTitle());
    25        }
    26        session.getTransaction().commit();
    27        session.close();
    28        
    29    }


    以上几种方法,其中QBC、QBE更加符合面向对象编程(仅此而已)。

  • 相关阅读:
    centos 6 安装
    DNS介绍
    Saltstack远程执行(四)
    Saltstack数据系统Grains和Pillar(三)
    array_multisort 二维数组排序
    jqgit...
    Redis 创建多个端口 链接redis端口
    百度商桥回话接口
    加ico
    redis 新开端口号
  • 原文地址:https://www.cnblogs.com/printN/p/6415642.html
Copyright © 2011-2022 走看看