Hibernate的集中查询方式 : hql查询,QBC查询和QBE查询
转载: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查询,一般需要以下三个步骤:
- 使用Session实例 的createCriteria()方法创建Criteria对象
- 使用工具类Restrictions的方法为Criteria对象设置查询条件,Order工具类的方法设置排序方式,Projections工具类的方法进行统计和分组。
- 使用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查询相关推荐
- Hibernate 查询方式(HQL/QBC/QBE)汇总
作为老牌的 ORM 框架,Hibernate 在推动数据库持久化层所做出的贡献有目共睹. 它所提供的数据查询方式也越来越丰富,从 SQL 到自创的 HQL,再到面向对象的标准化查询. 虽然查询方式有点 ...
- Hibernate的几种查询方式 HQL,QBC,QBE,离线查询,复合查询,分页查询
HQL查询方式 这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了 ...
- Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询
HQL查询方式 这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了 ...
- 模糊查询的hql语句_hql语句拼接模糊查询
第一种: @Override public List findByState(String apstate) { StringBuffer hql= new StringBuffer(); hql.a ...
- Hibernate的HQL、QBC、QBE查询总结
一.HQL查询 HQL的应用最为广泛,是最为常用的,跟SQL语句差不多,区别是: SQL基于表和字段查询,HQL基于类对象和属性查询 HQL的功能大概有: 属性查询.分组查询.动态实例查询(比较具备特 ...
- Hibernate中的QBC查询方式详解
Hibernate中的QBC查询方式详解 QBC:Query By Criteria,条件查询. 是一种更加面向对象化的查询的方式. 1.QBC简单查询 测试代码: package com.pipi. ...
- Hibernate框架 五种查询方式
OID查询 Hibernate根据对象OID(主键)进行检索 ①get() ②load() 对象导航检索 Hibernate根据一个已经查询到的对象,获得其关联的对象的一种查询方式 HQL检索(不支持 ...
- java hibernate 查询_Hibernate查询方式
? 一.Hibernate的三种查询方式 1.HQL(HibernateQueryLanuage)语句,这是类似SQL语句的一种对象化查询语句. 2.使用Criteria对象,进行按条件查询(Quer ...
- 14、Hibernate的HQL与QBC检索
Hibernate检索对象的方式 - HQL检索方式 - QBC检索方式 1.Hibernate提供的检索对象的方式 - 导航图对象检索方式 根据已经加载的对象,导航到其他对象.例如,对于已经加载的C ...
最新文章
- 1102面向对象和类原型
- ubuntu 14.04安装chrome浏览器
- ES6:Reflect
- 深度学习之Windows下安装caffe及配置Python和matlab接口
- Ironic 安装和配置详解
- 上下级平台之间数据同步方案_Alluxio与底层存储系统之间的元数据同步机制
- 移动端开发meta标签 viewport 设置
- Anchor 对象学习
- linux ssl 脚本 51cto,升级opensslopenssh的shell脚本
- C语言学习——编程软件安装和使用
- window.dialogArguments只兼容ie的问题解决
- python爬网易云音乐评论最多的歌_Python爬取网易云音乐上评论火爆的歌曲
- 微信商户号转账到个人银行卡加密算法及结果查询问题
- matlab对数组进行赋值的三种方法(常用于生成坐标轴)
- linux系统文件颜色含义
- 第一次去曼谷旅游怎么玩?这份省钱攻略请收好
- macOS更新系统到12.6后git无法使用
- Linux - 自动同步网络时间
- 『腾讯后台开发』实习生技能要求
- obs nginx-rtmp-module搭建流媒体服务器实现直播 ding
热门文章
- 互联网产品经验小分享——关于“虚荣指标”的思考(2020.8.3)
- EEG情感分析综述(三)
- 移动WebApp开发框架 Clouda!
- java不是有效的win32_不是有效的Win32应用程序的解决方法
- 欢迎观看Toni_hou的#生活6
- 伦敦银和现货白银换算
- LLMs:自然语言处理领域—大语言模型的涉及四大技术领域(TL/USL/PT+Fine/Seq2Seq)、十大核心组件之详细攻略
- 在阿里讲了5小时运营后,我想试着重新解读“运营”
- 年轻程序员与老程序员的对话
- 【运筹学】企业最重要的部分-预测和决策