Hibernate查询_HQL_EJBQL_QBC_QBE

Posted 噫吁嚱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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更加符合面向对象编程(仅此而已)。




























































































以上是关于Hibernate查询_HQL_EJBQL_QBC_QBE的主要内容,如果未能解决你的问题,请参考以下文章

hibernate_查询

JPQL / Hibernate 查询的动态表名

hibernate_分页查询

hibernate_分页查询

hibernate hql update操作

Hibernate5-唯一查询和聚合查询