Hibernate的几种查询方式 HQL,QBC,QBE,离线查询,复合查询,分页查询
HQL查询方式
这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多。条件查询、分页查询、连接查询、嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了类或者对象。其它的,包括一些查询函数(count(),sum()等)、查询条件的设定等,全都跟SQL语法一样。
示例:
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,离线查询,复合查询,分页查询
HQL查询方式 这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了 ...
- Hibernate 查询方式(HQL/QBC/QBE)汇总
作为老牌的 ORM 框架,Hibernate 在推动数据库持久化层所做出的贡献有目共睹. 它所提供的数据查询方式也越来越丰富,从 SQL 到自创的 HQL,再到面向对象的标准化查询. 虽然查询方式有点 ...
- 用定时器T0查询方式P0口8位控制LED闪烁 T1查询方式P1口8位控制LED闪烁
//用定时器T0查询方式P0口8位控制LED闪烁 T1查询方式P1口8位控制LED闪烁 #include<reg52.h> // 包含52单片机寄存器定义的头文件 #def ...
- db2分页查询语句优化_数据量很大,分页查询很慢,该怎么优化?
点击上方"服务端思维",选择"设为星标" 回复"669"获取独家整理的精选资料集 回复"加群"加入全国服务端高端社群「后 ...
- Hibernate的集中查询方式 : hql查询,QBC查询和QBE查询
转载:http://blog.csdn.net/iijse/article/details/6161143 通常使用的Hibernate通常是三种:hql查询,QBC查询和QBE查询: 1.QBE( ...
- mysql 回表查询优化_MySQL中的回表查询与索引覆盖:一次百万级别分页查询使用Limit 从90秒到0.6毫秒的优化...
这里写目录标题 事故现场 解决方案 提到的"回表查询" InnoDB的索引 什么是回表查询 怎么优化回表查询 事故现场 数据库使用的MySQL,有一个日志表,需要进行分页查询,于是 ...
- 【mybatis】在mybatis分页查询时,主表对关联表 一对多 分页查询怎么实现
现在有这样一个需求: 1.积分商品分页查询 2.一个积分商品会有多张商品图片在商品图片表 1:n的关系 这样在积分商品分页查询的时候,想要顺便把每个积分商品对应的商品图片信息也带出来 实现如下: 1 ...
- mysql分页查询出租房屋信息_分页查询信息(使用jdbc连接mysql数据库实现分页查询任务)...
分页查询信息 使用jdbc连接mysql数据库实现分页查询任务 通过mysql数据库提供的分页机制,实现商品信息的分页查询功能,将查询到的信息显示到jsp页面上. 本项目时一个简单的运用eclipse ...
- Hibernate框架 五种查询方式
OID查询 Hibernate根据对象OID(主键)进行检索 ①get() ②load() 对象导航检索 Hibernate根据一个已经查询到的对象,获得其关联的对象的一种查询方式 HQL检索(不支持 ...
最新文章
- JavaScript使用技巧精萃
- aidl生成java文件_Android AIDL自动生成Java文件测试
- UNITY相关的一些新功能,新想法
- Visual Studio Code (VSCode) 之 C/C++ 调试配置详解
- Node.js实现基于TCP与UDP的数据通信
- AG3 hang after click membership search
- 假设mysql数据表t1有字段_使用ROMA Connect集成数据
- 计算书费(信息学奥赛一本通-T1104)
- Mysql : InnoDB: Table flags are 0 in the data dictionary but the flags in file ./ibdata1 are 0x4800!
- Hlg 1030 排序
- 提取字符串中字母数字方法
- 关于学习Swift的一些感受
- python最新版安装图集_[python] plist图集拆分小图
- 远程控制安卓手机教程
- day15爬虫(二手房数据)
- 研发Owner的职责
- 判断字符串子序列--HW
- oracle 查看用户日志,Oracle查看用户操作sql语句以及数据库日志
- 如何选择日志审计系统
- 手动设置网页cookie的值