转载:http://blog.csdn.net/iijse/article/details/6161143

通常使用的Hibernate通常是三种:hql查询,QBC查询和QBE查询: 
1、QBE(Qurey By Example)检索方式 
QBE是最简单的,但是功能也是最弱的,QBE的功能不是特别强大,仅在某些场合下有用。一个典型的使用场合就是在查询窗口中让用户输入一系列的 查询条件,然后返回匹配的对象。QBE只支持=和like比较运算符,无法不大区间值,及其或的匹配。在这种情况下,还是采用HQL检索方式或QBC检索 方式。  

示例:
   1: Session session = SessionFactory.getCurrentSession();
   2: User user = null;
   3: Transaction ts = session.beginTransaction();
   4: try {
   5:     Query query = session.createQuery("from User as u where name='ijse'");
   6:     user= (User) query.list().get(0);
   7:     session.commit();
   8: } catch (HibernateException ex) {
   9:     ts.rollBack();
  10:     ex.printStackTrace();
  11: }
  12: System.out.println(user.getName());

QBC(Query By Criteria) 查询方式

这种方式比较面向对象方式,重点是有三个描述条件的对象:Restrictions,Order,Projections。使用QBC查询,一般需要以下三个步骤:

  1. 使用Session实例 的createCriteria()方法创建Criteria对象
  2. 使用工具类Restrictions的方法为Criteria对象设置查询条件,Order工具类的方法设置排序方式,Projections工具类的方法进行统计和分组。
  3. 使用Criteria对象的list()方法进行查询并返回结果

Restrictions类的常用方法:

方法名称
描述
Restrictions.eq 等于
Restrictions.allEq 使用Map,Key/Valu进行多个等于的比对
Restrictions.gt 大于
Restrictions.ge 大于等于
Restrictions.lt 小于
Restrictions.le 小于等于
Restrictions.between 对应SQL的between
Restrictions.like 对应SQL的like
Restrictions.in 对应SQL的in
Restrictions.and and关系
Restrictions.or or关系
Restrictions.sqlRestriction SQL限定查询

Order类的常用方法:

方法名称
描述
Order.asc 升序
Order.desc 降序

Projections类的常用方法

方法名称
描述
Projections.avg 求平均值
Projections.count 统计某属性的数量
Projections.countDistinct 统计某属性不同值的数量
Projections.groupProperty 指定某个属性为分组属性
Projections.max 求最大值
Projections.min 求最小值
Projections.projectionList 创建一个ProjectionList对象
Projections.rowCount 查询结果集中的记录条数
Projections.sum 求某属性的合计
示例:
   1: Session session = SessionFactory.getCurrentSession();
   2: User user = null;
   3: Transaction ts = session.beginTransaction();
   4: try {
   5:     Criteria criteria = session.createCriteria(User.class);
   6:     criteria.add(Restrictions.eq("name","ijse"));
   7:     user= (User) criteria.list().get(0);    
   8:     session.commit();
   9: } catch (HibernateException ex) {
  10:     ts.rollBack();
  11:     ex.printStackTrace();
  12: }
  13: System.out.println(user.getName());

QBE(Query By Example)查询方式

将一个对象的非空属性作为查询条件进行查询。

示例:
   1: Session session = SessionFactory.getCurrentSession();
   2: User user = new User();
   3: user.setName("ijse");
   4: Transaction ts = session.beginTransaction();
   5: try {
   6:     Criteria criteria = session.createCriteria(User.class);
   7:     criteria.add(Example.create(user));
   8:     user= (User) criteria.list().get(0);    
   9:     session.commit();
  10: } catch (HibernateException ex) {
  11:     ts.rollBack();
  12:     ex.printStackTrace();
  13: }
  14: System.out.println(user.getName());

离线查询

离线查询就是建立一个DetachedCriteria对象,将查询的条件等指定好,然后在session.beginTransaction()后将这个对象传入。通常这个对象可以在表示层建立,然后传入业务层进行查询。

示例:
   1: DetachedCriteria detachedCriteria = DetachedCriteria.forClass(User.class);
   2: detachedCriteria.add(Restrictions.eq("name","ijse");
   3:  
   4: Session session = SessionFactory.getCurrentSession();
   5: User user = new User();
   6: Transaction ts = session.beginTransaction();
   7: try {
   8:     Criteria criteria = detachedCriteria.getExecutableCriteria(session);
   9:     user= (User) criteria.list().get(0);    
  10:     session.commit();
  11: } catch (HibernateException ex) {
  12:     ts.rollBack();
  13:     ex.printStackTrace();
  14: }
  15: System.out.println(user.getName());

复合查询

复合查询就是在原有查询的基础上再进行查询,可以调用Criteria对象的createCriteria()方法在这个Criteria对象的基础上再进行查询。

示例:
   1: Session session = SessionFactory.getCurrentSession();
   2: User user = new 
   3: User();
   4: Transaction ts = session.beginTransaction();
   5: try 
   6: {
   7:  Criteria criteria1 = 
   8: session.createCriteria(Room.class);
   9: Criteria 
  10: criteria2 =criterial1.createCriteria("User");
  11:  
  12: criteria2.add(Restrictions.eq("name",new String("ijse"));
  13:  
  14: user= (User) criteria.list().get(0); 
  15:  
  16: session.commit();
  17: } catch (HibernateException ex) {
  18:  
  19: ts.rollBack();
  20:  
  21: ex.printStackTrace();
  22: }
  23: System.out.println(user.getName());

分页查询

分页查询主要是要指定两个参数:从第几条数据开始,取多少条数据。可以通过调用Query或者Criteria对象的setFirstResult()和setMaxResults()方法分别进行设定。

示例:

   1: Session session = SessionFactory.getCurrentSession();
   2: List userList = null;
   3: Transaction ts = session.beginTransaction();
   4: try {
   5:     Criteria criteria = session.createCriteria(User.class);
   6:     criteria.setFirstResult(0);//从第一个数据开始
   7:     criteria.setMaxResults(10);//取10条记录
   8:     userList = (List) criterial.list();   
   9:     session.commit();
  10: } catch (HibernateException ex) {
  11:     ts.rollBack();
  12:     ex.printStackTrace();
  13: }

Hibernate的集中查询方式 : hql查询,QBC查询和QBE查询相关推荐

  1. Hibernate 查询方式(HQL/QBC/QBE)汇总

    作为老牌的 ORM 框架,Hibernate 在推动数据库持久化层所做出的贡献有目共睹. 它所提供的数据查询方式也越来越丰富,从 SQL 到自创的 HQL,再到面向对象的标准化查询. 虽然查询方式有点 ...

  2. Hibernate的几种查询方式 HQL,QBC,QBE,离线查询,复合查询,分页查询

    HQL查询方式 这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了 ...

  3. Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询

    HQL查询方式 这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了 ...

  4. 模糊查询的hql语句_hql语句拼接模糊查询

    第一种: @Override public List findByState(String apstate) { StringBuffer hql= new StringBuffer(); hql.a ...

  5. Hibernate的HQL、QBC、QBE查询总结

    一.HQL查询 HQL的应用最为广泛,是最为常用的,跟SQL语句差不多,区别是: SQL基于表和字段查询,HQL基于类对象和属性查询 HQL的功能大概有: 属性查询.分组查询.动态实例查询(比较具备特 ...

  6. Hibernate中的QBC查询方式详解

    Hibernate中的QBC查询方式详解 QBC:Query By Criteria,条件查询. 是一种更加面向对象化的查询的方式. 1.QBC简单查询 测试代码: package com.pipi. ...

  7. Hibernate框架 五种查询方式

    OID查询 Hibernate根据对象OID(主键)进行检索 ①get() ②load() 对象导航检索 Hibernate根据一个已经查询到的对象,获得其关联的对象的一种查询方式 HQL检索(不支持 ...

  8. java hibernate 查询_Hibernate查询方式

    ? 一.Hibernate的三种查询方式 1.HQL(HibernateQueryLanuage)语句,这是类似SQL语句的一种对象化查询语句. 2.使用Criteria对象,进行按条件查询(Quer ...

  9. 14、Hibernate的HQL与QBC检索

    Hibernate检索对象的方式 - HQL检索方式 - QBC检索方式 1.Hibernate提供的检索对象的方式 - 导航图对象检索方式 根据已经加载的对象,导航到其他对象.例如,对于已经加载的C ...

最新文章

  1. 1102面向对象和类原型
  2. ubuntu 14.04安装chrome浏览器
  3. ES6:Reflect
  4. 深度学习之Windows下安装caffe及配置Python和matlab接口
  5. Ironic 安装和配置详解
  6. 上下级平台之间数据同步方案_Alluxio与底层存储系统之间的元数据同步机制
  7. 移动端开发meta标签 viewport 设置
  8. Anchor 对象学习
  9. linux ssl 脚本 51cto,升级opensslopenssh的shell脚本
  10. C语言学习——编程软件安装和使用
  11. window.dialogArguments只兼容ie的问题解决
  12. python爬网易云音乐评论最多的歌_Python爬取网易云音乐上评论火爆的歌曲
  13. 微信商户号转账到个人银行卡加密算法及结果查询问题
  14. matlab对数组进行赋值的三种方法(常用于生成坐标轴)
  15. linux系统文件颜色含义
  16. 第一次去曼谷旅游怎么玩?这份省钱攻略请收好
  17. macOS更新系统到12.6后git无法使用
  18. Linux - 自动同步网络时间
  19. 『腾讯后台开发』实习生技能要求
  20. obs nginx-rtmp-module搭建流媒体服务器实现直播 ding

热门文章

  1. 互联网产品经验小分享——关于“虚荣指标”的思考(2020.8.3)
  2. EEG情感分析综述(三)
  3. 移动WebApp开发框架 Clouda!
  4. java不是有效的win32_不是有效的Win32应用程序的解决方法
  5. 欢迎观看Toni_hou的#生活6
  6. 伦敦银和现货白银换算
  7. LLMs:自然语言处理领域—大语言模型的涉及四大技术领域(TL/USL/PT+Fine/Seq2Seq)、十大核心组件之详细攻略
  8. 在阿里讲了5小时运营后,我想试着重新解读“运营”
  9. 年轻程序员与老程序员的对话
  10. 【运筹学】企业最重要的部分-预测和决策