- 浏览: 248377 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
javatozhang:
讲解的的确不错。很实用。
Hibernate数据拦截与事件监听 -
sjx19871109:
更正一个地方:<event type="pos ...
Hibernate search -
xifan:
你好,楼主。
mutable="false 好像是 ...
Hibernate持久化对象生命周期 -
leo_cao:
很好,很实用
Hibernate数据拦截与事件监听 -
fehly:
47816778 写道你这样不会出现number 的精度问题吗 ...
Hibernate Annotations
Query接口
Query类型与org.hibernate.Criteria很接近,封装了对底层数据库表的查询请求
Query接口的常用方法
list()
iterate()
setMaxResults()
setFirstResult()
uniqueResult()
HQL查询
1.查询所有持久化对象
Transaction tx=session.beginTransaction();
Query query=session.ccreateQuery("from Testbook");
List list=query.list();
tx.commit();
2.投影查询
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("select title from Testbook"); List<String> list=query.list(); tx.commit(); for(String title : list){ System.out.println(title); }
3.查询持久化对象的多个属性
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("select new map(id,name,email) from Testbook"); List<Map> list=query.list(); tx.commit(); for(Map map : list){ System.out.println(map.get("0")+",\t"+map.get("1")+map.get("2")); }
这里的 id,name,email 分别对应 0,1,2
4.HQL 中使用别名
Query query=session.ccreateQuery("select tb name as name from Testbook as tb"); List<String> list=query.list();
可省略as,指定持久化类的别名
Query query=session.ccreateQuery("select tb name as name from Testbook tb"); List<String> list=query.list();
5.别名与属性值组成key/value对
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("select new map(tb.id,tb.name,tb.email) from Testbook"); List<Map> list=query.list(); tx.commit(); for(Map map : list){ System.out.println(map.get("id")+",\t"+map.get("name")+map.get("email")); }
6.使用distinct 查询独一无二的
Session session=HibernateSessionFactoryUtil.getSessionFactory().getCurrentSession(); Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("select distinct name from Testbook"); List<String> list=query.list(); tx.commit(); for(String name : list){ System.out.println(name); }
7.HQL中的运算符
8.where子句,限定查询的条件
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("from Testbook where name='Narcissus'"); List<Testbook> list=query.list(); tx.commit();
9.使用between/not between(两者之间)
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("from Testbook where id between 1 and 10"); List<Testbook> list=query.list(); tx.commit();
10.使用in/not in(在范围内)
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("from Testbook where name in ('Narcissus','Tom')"); List<Testbook> list=query.list(); tx.commit();
11.使用like/not like (模糊查询)
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("from Testbook where name like 'Na%'"); List<Testbook> list=query.list(); tx.commit();
12.使用and(几个或者多个条件需要同时满足)/or(只要满足一个条件)/not(条件求反)
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("from Testbook where name='Narcissus' and id<100"); List<Testbook> list=query.list(); tx.commit();
13. 使用is null (某个属性值是否为空)/is not null(某属性值不为空)
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("from Testbook where email is null"); List<Testbook> list=query.list(); tx.commit();
14.一个或多个熟悉的数据排序(逗号分隔即可)
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("from Testbook where name like 'Nar%' order by name,id desc"); List<Testbook> list=query.list(); tx.commit();
15.使用"?"作为参数占位符
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("from Testbook where id<?"); query.setInteger(0,12);//起始值从0开始 对应不同的类型 List<Testbook> list=query.list(); tx.commit();
16.使用统计函数
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("select min(price),max(price) from Testbook"); Object[] values=(Object[])query.uniqueResult(); tx.commit(); System.out.println("最低价"+"\t"+"最高价"); System.out.println(values[0]+"\t"+values[1]);
17.在分组中应用统计函数
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("select avg(price),count(*) from Testbook group by category.id"); List<Object[]> list=query.list(); tx.commit(); System.out.println("平均价"+"\t"+"总数"); for(Object[] values :list){ System.out.println(values[0]+"\t"+values[1]); }
18.使用having(限定条件)
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("select avg(price),count(*) from Testbook group by price having price>50.0"); List<Object[]> list=query.list(); tx.commit();
19.使用函数
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("select lower(name) from Testbook where id<100"); List<String> list=query.list(); tx.commit();
20.HQL 的批量更新/删除
Transaction tx=session.beginTransaction(); Query query=session.ccreateQuery("update Testbook set name='Narcissus' where id=1"); int rowCount =query.executeUpdate(); tx.commit();
HQL 中的连接查询
1.使用交叉连接
Transaction tx=session.beginTransaction(); String hql="from Product p,Category c"; Query query = session.createQuery(hql); List list=query.list(); tx.commit();
使用内连接
QBC中实现内连接
Transaction tx=session.beginTransaction(); Criteria criteria = session.createCriteria(Product.class).createCriteria("category"); List<Product> list=query.list(); tx.commit();
使用左外连接
使用右外连接
迫切内,左,右(加fetch关键字)连接
Transaction tx=session.beginTransaction(); String hql="select c from Category c join fetch c.products"; Query query = session.createQuery(hql); List<Category> list=query.list(); tx.commit();
发表评论
-
Hibernate与Struts2,Spring
2010-04-25 19:23 1544Struts2 框架 Struts是Apache ... -
Hibernate search
2010-04-22 15:28 6203搜索引擎 全文搜索引 ... -
Hibernate Annotations
2010-04-21 14:54 7010在过去几年里,Hibernate不断发展,几乎成为Jav ... -
Hibernate性能优化
2010-04-20 16:25 1388使用dynamic-insert与dynamic-update ... -
Hibernate的缓存
2010-04-19 19:47 2024持久层缓存的级别 事务级别的缓存 应用(进程)级别的缓存 ... -
Hibernate数据拦截与事件监听
2010-04-17 19:33 6517拦截器(Interceptor)org.hibernate.I ... -
Hibernate过滤器
2010-04-16 17:31 1489Hibernate过滤器的概念 Hibernate过滤器类 ... -
Hibernate继承映射
2010-04-15 19:48 1016继承映射 3种方式,继承关系映射到数据库的表中 1.继承关 ... -
Hibernate的事务管理
2010-04-14 20:00 1317数据库事务数据库的事务指的是把一系列的数据库操作组成一个单元, ... -
Native SQL查询
2010-04-13 23:15 1217HQL写的有点累有些东西 ... -
Criteria查询
2010-04-12 18:42 12382Hibernate的三种查询方式 1.HQL (Hibern ... -
映射多对多关联关系
2010-04-10 15:19 1365多对多单向关联 使用多对多关联,需要借助一个起中介作用的连接 ... -
映射一对一关联关系
2010-04-09 21:08 977共享主键关系 两个关联表使用相同的主键值 类: ... -
Hibernate映射多对一关联关系
2010-04-08 15:03 1449多对一的单向关联 表于表的关联可以分为一对一,一对多,多对一 ... -
Hibernate组件映射
2010-04-07 16:03 5228组件Components 除了粗粒度的对象模型设计(一个表 ... -
Hibernate的集合映射
2010-04-06 15:31 1237Set 接口 set类型的对象,被加入的对象不能重复, ... -
浅谈OSIV与泛型DAO模式
2010-04-05 22:13 3595open session in view 简称 O ... -
java.lang.NoClassDefFoundError: org/hibernate/Session的异常
2010-03-22 15:15 7105今天写程序突然报这个错误,挺郁闷的,因为这个包是导入别人的(事 ... -
Hibernate持久化对象生命周期
2010-03-19 14:41 2332持久化对象生命周期 Persisten ... -
Hibernate标示符属性的生成策略
2010-03-18 16:53 1501标示符属性 Hibernate中的标示符属性,也可以称为Hi ...
相关推荐
### HQL查询及语法详解 #### 一、HQL简介 HQL,全称为Hibernate Query Language,是Hibernate框架提供的一种面向对象的查询语言。它基于SQL标准,但更加强调对象模型,支持Java中的对象关系映射(ORM),能够处理...
### HQL查询详解 HQL(Hibernate Query Language)是一种面向对象的查询语言,它提供了与SQL类似的功能,但更贴近于面向对象编程的思维方式。HQL允许开发人员以一种更自然的方式查询数据库,同时保持了Java对象模型...
SSH笔记-HQL查询(基于位置参数查询、基于命名参数查询、分页查询、命名查询、投影查询报表查询、内/迫切内/左外/迫切左外连接查询)、QBC(QBC检索查询、统计查询、排序查询、HQL操作数据库)、本地SQL查询
这里的关键点在于使用`createQuery`方法创建了一个HQL查询对象,并通过`setString`方法设置参数值,最后通过`list`方法执行查询并获取结果列表。 #### 三、分页查询 分页查询在处理大量数据时非常有用,可以有效地...
HQL 查询语言基础知识 HQL(Hibernate Query Language)是一种面向对象的查询语言,用于在 Hibernate 框架中查询数据库。HQL 查询语言基础知识是 Hibernate 中的基础组件之一,对于开发人员来说,掌握 HQL 查询语言...
JPA--HQL查询(手动写原生查询sql,复杂查询必备) JPA(Java Persistence API)是一种JavaEE标准,用于持久化数据,HQL(Hibernate Query Language)是 Hibernate 框架提供的一种查询语言,它允许开发者使用面向...
标题"HibernateUtil分装完整版HQL查询"暗示了这是一个关于使用HibernateUtil工具类来封装和执行HQL(Hibernate Query Language)查询的教程或代码示例。描述中的重复信息进一步强调了这个主题,意味着我们将探讨如何...
**HQL查询语言基础** HQL(Hibernate Query Language)是Hibernate框架中用于操作对象关系映射(ORM)的查询语言,它与SQL类似,但专为面向对象编程设计。HQL允许开发者以类和对象的方式编写查询,而不是直接处理...
HQL查询的使用极大地提高了开发效率,因为它将数据操作与具体的数据库结构分离。 **1. HQL的基本语法** HQL查询语句结构通常包括以下几个部分:`SELECT`, `FROM`, `WHERE`, `GROUP BY`, `HAVING`, `ORDER BY`。...
【标题】:深入理解Hibernate的查询机制:HQL查询 【描述】:在ORM框架Hibernate中,数据查询和检索是一个核心功能,它提供了多种查询方式,包括标准化对象查询(Criteria Query)、Hibernate查询语言(HQL)和原生...
HQL查询 帮助文档
《Hibernate HQL查询语法详解》 Hibernate,作为Java领域中广泛应用的对象关系映射(ORM)框架,极大地简化了数据库操作。其内置的HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者以类和...
本文将深入探讨“常用易懂,易会”的HQL查询,帮助你快速上手并熟练掌握这一技能。 1. **HQL基础概念** HQL是Hibernate提供的面向对象的查询语言,与SQL类似,但更加面向对象,减少了数据库方言的差异,提高了代码...
HQL查询
在HQL查询语言中,`FROM`子句用于指定查询数据来源的实体或表。例如: ```hql FROM Person as p ``` 这里的`Person`表示的是一个持久化类,即ORM映射中的实体类。`as p`则定义了一个别名`p`,方便后续在查询语句中...
在实际项目中,结合Hibernate的注解方式和HQL查询,开发者可以高效地处理数据库操作,降低了SQL编写的工作量,提高了代码的可读性和可维护性。同时,Hibernate还提供了Criteria API和Querydsl等其他查询方式,提供了...
### Hibernate HQL 查询详解 #### 一、HQL 概述 Hibernate 提供了一种非常强大的查询语言——HQL(Hibernate Query Language),它在语法上与 SQL 类似但功能更为强大,因为它支持面向对象的特性,例如继承、多态性...
### HQL查询语句详解 #### 一、HQL简介 Hibernate Query Language(HQL)是一种面向对象的查询语言,其语法与SQL相似但并非完全相同。HQL的设计旨在更好地支持面向对象编程特性,比如继承、多态以及关联等概念。...
本教程聚焦于“完善HibernateUtil类及HQL查询入门”,让我们深入探讨这两个关键概念。 首先,`HibernateUtil` 类是 Hibernate 教程中常见的一种工具类,它的主要作用是提供对 Hibernate 框架的简单封装,以方便进行...