查询按功能强弱可以分为以下几种:
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的更多相关文章

  1. Hibernate查询

    HIbernate查询 使用get方法 使用get方法通过持久类名和ID号查找一个对象Stu instance = (Stu) getsession() .get("com.lovo.po. ...

  2. Hibernate 查询MatchMode的四种模式

    Hibernate 查询MatchMode的四种模式 MatchMode.START:字符串在最前面的位置.相当于"like 'key%'" MatchMode.END:字符串在最 ...

  3. hibernate查询方式

    hibernate查询方式:1.本地SQL查询 2.HQL查询 3.QBC查询 HQL查询:是面向对象的查询语言,是使用最广的一种查询方法 QBC查询:Query by Criteria是一套接口来实 ...

  4. Hibernate查询出现java.lang.IllegalArgumentException异常解决方法

    Hibernate查询出现java.lang.IllegalArgumentException. 异常信息如下:java.lang.IllegalArgumentException        at ...

  5. (十)Hibernate 查询方式

     所有项目导入对应的hibernate的jar包.mysql的jar包和添加每次都需要用到的HibernateUtil.java 第一节:Hibernate 查询方式简介 1,导航对象图查询方式: 2 ...

  6. 六种方式实现hibernate查询

    最近在学习Hibernate的基本内容,刚好在项目中有用到,基本上都是用到哪就学哪. 今天看看六种方式实现hibernate查询......... 分别是HQL查询,对象化查询Criteria方法,动 ...

  7. 记录使用Hibernate查询bean中字段和数据库列类型不匹配问题

    今天在工程中遇到Hibernate查询的时候,bean中的字段和数据库中的字段不符合(bean中有pageTime字段,但是数据库中没有此列)报错问题. 具体问题环境: 在auto_off表中,off ...

  8. hibernate 查询、二级缓存、连接池

    hibernate 查询.二级缓存.连接池 查询: 1) 主键查询 Dept dept =  (Dept) session.get(Dept.class, 12); Dept dept =  (Dep ...

  9. Hibernate查询、连接池、二级缓存

    Hibernate第三天: 1. 对象状态 2. session缓存 3. lazy懒加载 4. 映射 一对一对映射 组件/继承映射 目标: 一.hibernate查询 二.hibernate对连接池 ...

随机推荐

  1. X86 寻址方式、AT&T 汇编语言相关知识、AT&T 与 Intel 汇编语言的比较、gcc 嵌入式汇编

    注:本分类下文章大多整理自<深入分析linux内核源代码>一书,另有参考其他一些资料如<linux内核完全剖析>.<linux c 编程一站式学习>等,只是为了更好 ...

  2. 使用Apktools反编译apk应用

    使用Apktools反编译apk应用 1.获取APK的classes.dex文件: 得到你想要的应用的apk文件,用解压软件打开apk,从apk中复制出classes.dex文件. 2.classes ...

  3. Python sin() 函数

    描述 sin() 返回的x弧度的正弦值. 语法 以下是 sin() 方法的语法: import math math.sin(x) 注意:sin()是不能直接访问的,需要导入 math 模块,然后通过 ...

  4. 在python中配置MySQL数据库

    MySQL数据库(1) 尽管用文件形式将数据保存到磁盘,已经是一种不错的方式.但是,人们还是发明了更具有格式化特点,并且写入和读取更快速便捷的东西——数据库(如果阅读港台的资料,它们称之为“资料库”) ...

  5. Generalized Linear Models

    作者:桂. 时间:2017-05-22  15:28:43 链接:http://www.cnblogs.com/xingshansi/p/6890048.html 前言 主要记录python工具包:s ...

  6. javascript限定输入textarea输入长度

    <textarea  id="content" onkeyup="limitLength(this.value,'512','content')"> ...

  7. 客户端负载均衡:Ribbon

    Ribbon是一个客户端的负载均衡器,可以提供很多HTTP和TCP的控制行为.Feign已经使用了Ribbon,所以如果你使用了@FeignClient,Riboon也同样被应用了. Ribbon核心 ...

  8. 《Effective Java》读书笔记二(通用方法)

    No8 覆盖equals方法时请遵守通用约定 通用约定,下面的约定前提都是x/y/z不为null值. 自反性(reflexive),x.equals(x)必须返回true. 对称性(symmetric ...

  9. Oracle学习笔记之一,重温范式

    第一范式(1NF) 第一范式是第二和第三范式的基础,是最基本的范式.第一范式包括下列的指导原则: 数据组的每个属性只可以包含一个值. 关系中的每个数组必须只包含相同数量的值. 关系中的每个数组一定不能 ...

  10. 「Java Web」主页静态化的实现

    一个站点的主页一般不会频繁变动,而大多数用户在訪问站点时不过浏览一下主页(未登陆).然后就离开了.对于这类訪问请求.假设每次都要通过查询数据库来显示主页的话,显然会给server带来多余的压力. 这时 ...