- 浏览: 151016 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (210)
- java (44)
- javascript (5)
- 网摘 (21)
- 程序人生 (19)
- hibernate (21)
- spring (7)
- struts (1)
- jquery (2)
- mssql (3)
- mysql (3)
- oracle (7)
- 学习日记 (10)
- PowerDesigner (1)
- android (4)
- 调试 (1)
- tomcat (3)
- webapp (1)
- context (2)
- jsp (2)
- 学习 (18)
- 态度 (4)
- 坚持 (4)
- jsf (1)
- ui (1)
- css (1)
- seam (0)
- 转载 (5)
- JNDI (1)
- 创业 (1)
- 公司 (1)
- 方向 (1)
- ETL (1)
- Datastage (1)
- 数据整合 (1)
- 心情,感触 (1)
- 开发 (2)
- 测试 (1)
- 需求 (1)
- 湿身 (1)
- 网购,分类 (1)
- 驾校,转载 (1)
- 中秋,露营 (1)
- 域名 (1)
- 空间 (1)
- 网站程序 (1)
- SolrCloud (1)
- Solr (6)
- 全文库 (1)
- HBase (1)
- Hadoop (1)
- 网络应用 (1)
- 数据结构 (1)
- NoSQL (1)
- jQueryEasyUI (1)
- 面试 (1)
- 三十六计 (1)
- S2S3H4 (1)
- jar (1)
- war (1)
- web 项目 (1)
- Subversion (1)
- TortoiseSVN (1)
- MyEclipse (1)
- eclipse svn插件 (1)
- SQL2005 (1)
- ASP (1)
- 笔记 (2)
- 虚拟器、centOS、jdk、tomcat、nginx (1)
- memcached (1)
- nginx (1)
- telnet (1)
- nfs (1)
- zookeeper (2)
- window (1)
- linux (3)
- cronolog (1)
- web (1)
- mybatis (3)
- 设计模式 (1)
- 测试覆盖率 (1)
- EclEmma (1)
- tomcat7 (1)
- sore (1)
- 时间 (1)
- fackbook (0)
- facebook (1)
- IK (2)
- PKUSUMSU (1)
- openoffice (1)
- pdf (1)
- memcache (1)
- 动态词库 (1)
- 动态同义词 (1)
- centos7.3 (2)
- maven (4)
- 111 (0)
- nexus (2)
- 23种设计模式 (1)
- springboot (1)
- shiro (1)
- redis (1)
- rabbitMQ (1)
- native (1)
- dll (1)
- jasperReports (1)
- ireport (1)
最新评论
-
zhongfenglin:
学车的经历 -
Tiny_小小:
...
网购的选择 -
jrjr200411:
楼主写的好!
面对大公司和小公司的选择 -
feelboy:
说的很好。
每周四十小时,你有多少是在为自己干活?
在hql中关键字不区分大小写,但是属性和类名区分大小写
1、简单属性查询【重要】
* 单一属性查询,返回结果集属性列表,元素类型和实体类中相应的属性类型一致
* 多个属性查询,返回的集合元素是对象数组,数组元素的类型和对应的属性在实体类中的类型一致
数组的长度取决与select中属性的个数
* 如果认为返回数组不够对象化,可以采用hql动态实例化Student对象
参见:SimplePropertyQueryTest.java (取主要代码)
单一属性查询 select name from Student 多个属性 select id,name from Student 使用实体 select new com.Student (id,name) from Student 使用别名 select s.id,s.name from Student s select s.id,s.name from Student as s
2、实体对象查询【重要】
* N + 1问题,在默认情况下,使用query.iterate查询,有可以能出现N+1问题
所谓的N+1是在查询的时候发出了N+1条sql语句
1: 首先发出一条查询对象id列表的sql
N: 根据id列表到缓存中查询,如果缓存中不存在与之匹配的数据,那么会根据id发出相应的sql语句
* list和iterate的区别?
* list每次都会发出sql语句,list会向缓存中放入数据,而不利用缓存中的数据
* iterate:在默认情况下iterate利用缓存数据,但如果缓存中不存在数据有可以能出现N+1问题
参见:SimpleObjectQueryTest1.java/SimpleObjectQueryTest2.java
//SimpleObjectQueryTest1.java 各种hql语句查询 from Student from Student s from Student as s select s from Student s select s from Student as s //SimpleObjectQueryTest2.java 区别list与iterator方法查询,出现hql语句次数 list查询没缓存,查询几次就出现几次 iterator查询没缓存会出现n+1次,多出来的一次是查询id列表,但是出现相同的数据查询会到缓存中去取,不会出现hql语句
3、条件查询【重要】
* 可以采用拼字符串的方式传递参数
* 可以采用 ?来传递参数(索引从0开始)
* 可以采用 :参数名 来传递参数
* 如果传递多个参数,可以采用setParamterList方法
* 在hql中可以使用数据库的函数,如:date_format
参见:SimpleConditionQueryTest.java
//?来传递参数(索引从0开始) List students = session.createQuery("select s.id, s.name from Student s where s.name like ?") .setParameter(0, "%1%").list(); //使用 :参数名称 的方式传递参数值 List students = session.createQuery("select s.id, s.name from Student s where s.name like :myname") .setParameter("myname", "%1%").list(); //支持in,需要使用setParameterList进行参数传递 List students = session.createQuery("select s.id, s.name from Student s where s.id in(:myids)") .setParameterList("myids", new Object[] { 1, 2, 3, 4, 5 }) .list();
4、hibernate也支持直接使用sql进行查询
参见:SqlQueryTest.java
List students = session.createSQLQuery("select id,name from t_student ").list();
5、外置命名查询
* 在映射文件中采用<query>标签来定义hql
* 在程序中采用session.getNamedQuery()方法得到hql查询串
参见:Student.hbm.xml、NameQueryTest.java
<class name="Student" table="t_Student"> <id name="id" type="integer"> <generator class="increment" /> </id> <property name="name"/> <property name="createTime"/> <many-to-one name="classes" column="classesid" /> <filter name="filtertest" condition="id < :myid" /> </class> <query name="searchStudents"> <![CDATA[ SELECT s FROM Student s where s.id<? ]]> </query> <filter-def name="filtertest"> <filter-param name="myid" type="integer" /> </filter-def>
List students = session.getNamedQuery("searchStudents").setParameter(0, 10).list();
6、查询过滤器
* 在映射文件中定义过滤器参数
* 在类的映射中使用这些参数
* 在程序中启用过滤器
参见:Student.hbm.xml(同5)、FilterQueryTest.java
session.enableFilter("filtertest") .setParameter("myid", 10); List students = session.createQuery("from Student").list();
7、分页查询【重要】
* setFirstResult(),从0开始
* setMaxResults,每页显示多少条数据
参见:PageQueryTest.java
List students = session.createQuery("from Student").setFirstResult(1) //从第二条开始读 .setMaxResults(20) //读了20条 .list();
8、对象导航查询,在hql中采用 . 进行导航【重要】
参见:ObjectNavQueryTest.java
//配置student与class的多对一配置 List students = session.createQuery("select s.name from Student s where s.classes.name like '%1%'").list();
9、连接查询【重要】
* 内连
* 外连接(左连接/右连接)
参见:JoinQueryTest.java
//内连接 List students = session.createQuery("select c.name, s.name from Student s inner join s.classes c").list(); //外连接 List students = session.createQuery("select c.name, s.name from Classes c left join c.student s").list();
10、统计查询【重要】
参见:StatQueryTest.java
//统计出来的对象是整形的 Object obj = session.createQuery("select count(*) from Student").uniqueResult(); Integer result = (Integer)obj;
11、DML风格的操作(尽量少用,因为和缓存不同步)
参见:DMLQueryTest.java
session.createQuery("update Student s set s.name=? where s.id < ?") .setParameter(0, "李四") .setParameter(1, 5) .executeUpdate();
发表评论
-
Hibernate工作原理
2019-05-14 20:00 326hibernate 简介:hibernate是一个开源框架, ... -
SSH整合的几种最常见方式 .
2012-03-22 12:00 1206Spring实例Action的两种方式:1、Delegatin ... -
Hibernate Annotation笔记
2011-11-23 23:58 618(1)简介:在过去几年里,Hibernate不断发展,几乎 ... -
使用 Hibernate 进行大数据量的性能测试
2010-11-08 20:28 980近日为是否在项目中使 ... -
加速你的Hibernate引擎
2010-11-08 19:35 700参考(上、下): http://blog.csdn.net/ ... -
hibernate各种属性配置
2010-10-29 10:32 991hibernate.dialect 一个Hibern ... -
hibernate的映射
2010-10-24 17:41 700集合映射 public class CollectionMa ... -
多对多
2010-10-24 17:11 688多对多单向 User(多)对多(Role),一般都是通过中间 ... -
多对一
2010-10-24 17:00 823多对一单向 User(多)对Group(一),在User实体 ... -
一对多
2010-10-24 16:51 714一对多单向 定义两个实体类,及两个映射文件 一对多一的一端 ... -
一对一
2010-10-24 16:36 657一对一单向 定义两个类,两个映射文件一个工具类生成表 pu ... -
hibernate的抓取策略
2010-10-24 16:08 716hibernate抓取策略(单端代理的批量抓取) 保持默认, ... -
hibernate的继承
2010-10-24 15:54 653每棵继承树映射成一张表 1、理解如何映射 因为类继承树肯定 ... -
hibernate的锁
2010-10-24 15:48 737乐观锁 大多数基于数据版本记录机制(version)实现,一 ... -
hibernate的lazy
2010-10-24 15:44 779hibernate lazy策略可以使用在: * <cl ... -
hibernate的缓存
2010-10-24 15:33 977hibernate一级缓存 一级缓存很短和session的生命 ... -
session管理
2010-10-24 15:01 812了解Hibernate中CRUD操作 了解get和load的 ... -
hibernate基本配置
2010-10-24 13:22 7931.开发环境Window 2.开发工具MyEclispe5. ... -
Hibernate 各种数据库的配置
2010-09-13 10:33 9181. MySql连接配置 MySql数据库的hiber ... -
hibernate学习
2009-07-21 13:54 900hibernate多对多的解决Hibernate多对多的例子 ...
相关推荐
Hibernate查询语言HQL
Hibernate查询语言HQL.PPT
hibernate 查询语言 HQL的使用详解及实例, 个人笔记,适合初学者
HQL Hibernate查询语言,HQL的学习和参考的文档,开发必备。
HQL中文语法参考, 详细描述hibernate 查询语言的各种语法,是不可多得的HQL中文参考资料!
Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的概念。
hibernate映射lazy策略hibernate查询语言hql
Hibernate 学习笔记 get和load的区别 一对一,一对多,多对多 悲观锁,乐观锁 hibernate查询语言hql hibernate一级缓存、二级缓存 抓取策略
HQL查询是一种面向对象的查询语言,其中没有表和字段的概念,只有类、对象和属性的概念,HQL 是应用较为广泛的方式.这是本人对HQL知识点做的一个总结性的练习
此书对Hibernate的查询语言hql进行详细的介绍,用来做工具书还是很不错的。
Hibernate 配备了一种非常强大的查询语言,这种语言看上去很像 SQL。但是不要被语法结构上的相似所迷惑,HQL 是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态和关联之类的概念。
HQL :是面向对象的查询语言,同SQL有些相似是Hib中最常用的方式。 查询设定各种查询条件。 支持投影查询,检索出对象的部分属性。 支持分页查询,允许使用having和group by 提供内制的聚集函数,sum(),min(),max...
HQL是完全面向对象的查询语言,因此可以支持继承和多态等特征。HQL查询依赖于Query类,每个Query实例对应一个查询对象,使用HQL查询按 如下步骤进行: (1)获取Hibernate Session对象; (2)编写HQL语句; (3)以HQL...
HQL:Hibernate Qusery Language,如果你已经熟悉它,就会发现它跟SQL非常相像。不过 你不要被表面的假象迷惑,HQL是面向对象的(OO,用生命的眼光看待每一个对象,他们是如此 鲜活)。如果你对JAVA和SQL语句有一定...
Hibernate提供了它特有的数据库查询语言HQL,这种查询语言屏蔽了不同数据库之间的差别,使你可以编写统一的查询语句执行查询。不同于其他持久化解决方案的是Hibernate并没有把SQL的强大功能屏蔽掉,而是仍然兼容SQL...
HQL是Hibernate Query Language的缩写,语法很想SQL,但是HQL是一种面向对象的查询语言。SQL的操作对象是数据列、表等数据库对象,而HQL操作的是类、实例、属性