作为老牌的 ORM 框架,Hibernate 在推动数据库持久化层所做出的贡献有目共睹。

它所提供的数据查询方式也越来越丰富,从 SQL 到自创的 HQL,再到面向对象的标准化查询。

虽然查询方式有点眼花缭乱,配置使用起来也稍微有点复杂。

但是丝毫掩盖不了它迷人的地方,本篇博客试着汇总 Hibernate 所有的查询方式。

萝卜青菜各有所爱,工作中可以根据自己的喜好选择其中的几种进行编程。

1. HQL 方式,参数使用问号占位(4.1 版本中已被废弃)

public List<UserPO> getUserList(UserPO userPO) {String hql = "from UserPO where name = ? and passwd= ?";Query query = getHibernateSession().createQuery(hql);query.setParameter(0, userPO.getName());query.setParameter(1, userPO.getPasswd());return query.list();}

2. HQL 方式,参数使用命名占位

   public List<UserPO> getUserList(UserPO userPO) {String hql = "from UserPO where name = :userName and passwd= :userPwd";Query query = getSession().createQuery(hql);query.setParameter("userName", userPO.getName());query.setParameter("userPwd", userPO.getPasswd());return query.list();}

3. HQL 方式,参数使用 JPA 占位符

  public List<UserPO> getUserList(UserPO userPO) {String hql = "from UserPO where name = ?1 and passwd= ?2";Query query = getSession().createQuery(hql);query.setParameter("1", userPO.getName());query.setParameter("2", userPO.getPasswd());return query.list();}

4. HQL 方式,参数使用对象绑定

   public List<UserPO> getUserList(UserPO userPO) {String hql = "from UserPO where name = :name and passwd= :passwd";Query query = getSession().createQuery(hql);query.setProperties(userPO);return query.list();}

PS:需要注意的是命名参数占位要与PO属性一致,而且只能使用参数命名占位的方式。

当然上述的 1--4 填充查询方式,HQL 都可以调整为SQL,是相通的。

5. QBC(Query By Criteria) 方式,参数使用 Restrictions 对象

   public List<UserPO> getUserList(UserPO userPO) {Criteria criteria = getSession().createCriteria(UserPO.class);criteria.add(Restrictions.eq("name",userPO.getName()));criteria.add(Restrictions.eq("passwd",userPO.getPasswd()));return criteria.list();}

6. QBC(Query By Criteria) 方式,参数使用对象绑定

  public List<UserPO> getUserList(UserPO userPO) {Criteria criteria = getSession().createCriteria(UserPO.class);criteria.add(Example.create(userPO));return criteria.list();}

PS: QBC(Query By Criteria) 方式,使用到的关键抽象对象有:
     Restrictions --> 设置查询限制条件
     Order --> 设置查询排序条件
     Projections --> 工具类的方法进行统计和分组。

上述 5-6 也是我最喜欢的方式,用面向对象查询方式来迎合面向对象的编程。

7. 离线条件查询

 public List<UserPO> getUserList(UserPO userPO) {DetachedCriteria detachedCriteria = DetachedCriteria.forClass(UserPO.class);detachedCriteria.add(Restrictions.eq("name",userPO.getName()));detachedCriteria.add(Restrictions.eq("passwd",userPO.getPasswd()));Criteria criteria = detachedCriteria.getExecutableCriteria(getSession());return criteria.list();}

离线查询的好处,可以将查询对象 DetachedCriteria 作为参数传递到 DAO层,减少 DAO 层代码

8. QBC(Query By Criteria) 方式,分页查询

   public List<UserPO> getUserList(UserPO userPO) {Criteria criteria = getSession().createCriteria(UserPO.class);criteria.setFirstResult(4);criteria.setMaxResults(3);return criteria.list();}
}

PS: 分页查询主要是要指定两个参数(从什么开始,取多少条):
     Query或者Criteria对象的 setFirstResult()和setMaxResults()

当然8中的 Criteria  对象也可以换为 Query 对象,使用 HQL 或者 SQL 查询方式。

作者:Orson 
出处:http://www.cnblogs.com/java-class/ 
如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】 
如果,您希望更容易地发现我的新博客,不妨点击一下左下角的【关注我】 
如果,您对我的博客内容感兴趣,请继续关注我的后续博客,我是【Orson】

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段 声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载于:https://www.cnblogs.com/AACgao/p/6017241.html

Hibernate 查询方式(HQL/QBC/QBE)汇总相关推荐

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

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

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

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

  3. Hibernate查询方式

    Hibernate查询方式 1 OID查询 (1)根据id查询某一条记录,返回对象 2 对象导航查询 (1)根据id查询某个公司,再查询这个公司里面所有的员工   Company c=session. ...

  4. Hibernate的集中查询方式 : hql查询,QBC查询和QBE查询

    转载:http://blog.csdn.net/iijse/article/details/6161143 通常使用的Hibernate通常是三种:hql查询,QBC查询和QBE查询:  1.QBE( ...

  5. hibernate查询方式总结(四)之QBC,QBE查询

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

  6. .Net转Java自学之路—Hibernate框架篇三(查询方式)

    Hibernate查询方式: 1.对象导航查询:根据id查询出一的数据,再根据一的查询结果查询多的数据. OnlyClass only=session.get(OnlyClass.class,1); ...

  7. Hibernate框架 五种查询方式

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

  8. 北大青鸟深圳嘉华学校分享Hibernate查询

    1.Hibernate查询方式 1.get|load(class,id):OID查询 2.HQL(Hibernate Query Lanage):HQL查询 3.QBC(Query By Criter ...

  9. hibernate的 HQL、QBE、QBC

    一:HQL语句  -- 面向对象的思想,字段用pojo的变量名代替,表名用pojo类名代替,有几种参数的表示方法,这里不举例,网上很多. 没有select 的 hql查询语句:查询该表所有字段.调用l ...

最新文章

  1. eoLinker AMS 专业版V3.3发布:分享项目可以测试并选择分享内容等
  2. 037_Unicode对照表三
  3. CTFshow 反序列化 web278
  4. k8s mysql 配置文件_k8s配置文件模板
  5. 《UNIX环境高级编程 3rd》笔记(1 / 21):UNIX基础知识
  6. 改进初学者的PID-初始化
  7. SQL必知必会-检索数据
  8. C# .net Static 干什么的
  9. L2-018 多项式A除以B(模拟)
  10. java doctitle_Java ActionItem.setDocTitle方法代码示例
  11. 阿里云播放器直播rtsp、rtmp、flv流,flash播放直播流
  12. keil系列 魔法棒(目标选项)配置、编译工具ARMCC
  13. 数字图像处理实验之Matlab对图像的基本处理
  14. 机器学习中的数学——结构化概率模型/图模型
  15. 有些CAD通过Arcgis程序读取后,发现面积不对
  16. matlab中怎么使用数组,matlab中数组的基本使用
  17. ios10前台收到推送_APP在前台收到推送消息时也会弹出提醒?
  18. Word | 图片被文字遮挡
  19. 如何优雅的阅读DBNet的训练代码
  20. 渤海船舶职业学院计算机应用,我院在第十一届全国大学生计算机应用能力与信息素养大赛中取得佳绩...

热门文章

  1. Android OpenGL ES 应用(一)
  2. 苹果还未发布,华强北厂商已做出成品
  3. Linux NTP时钟同步
  4. javascript简介(概念)
  5. MSM实现tomcat集群的session共享
  6. Linux学习-21-yum命令(查询、安装、升级和卸载软件包)和软件组管理
  7. 公告:CSDN新版个人空间上线公测
  8. 山东教师教育网研修平台-首页
  9. 下一代Linux文件系统,存储那些事儿(二): 下一代Linux文件系统BTRFS简介
  10. 工商银行顾欣:分布式全链路灰度发布的探索与实践