- 浏览: 887389 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (687)
- java (127)
- servlet (38)
- struts (16)
- spring (22)
- hibernate (40)
- javascript (58)
- jquery (18)
- tomcat (51)
- 设计模式 (6)
- EJB (13)
- jsp (3)
- oracle (29)
- RUP (2)
- ajax (3)
- java内存管理 (4)
- java线程 (12)
- socket (13)
- path (5)
- XML (10)
- swing (2)
- UML (1)
- JBPM (2)
- 开发笔记 (45)
- Note参考 (15)
- JAXB (4)
- Quartz (2)
- 乱码 (2)
- CSS (2)
- Exception (4)
- Tools (7)
- sqlserver (3)
- DWR (7)
- Struts2 (47)
- WebService (2)
- 问题解决收藏 (7)
- JBOSS (7)
- cache (10)
- easyUI (19)
- jQuery Plugin (11)
- FreeMarker (6)
- Eclipse (2)
- Compass (2)
- JPA (1)
- WebLogic (1)
- powerdesigner (1)
- mybatis (1)
最新评论
-
bugyun:
受教了,谢谢
java 正则表达式 过滤html标签 -
xiongxingxing_123:
学习了,感谢了
java 正则表达式 过滤html标签 -
wanmeinange:
那如果无状态的。对同一个任务并发控制怎么做?比如继承Quart ...
quartz中参数misfireThreshold的详解 -
fanjieshanghai:
...
XPath 元素及属性查找 -
tianhandigeng:
还是没明白
quartz中参数misfireThreshold的详解
本文一部分转自kuangbaoxu的博文hibernate------hql总结
博文地址:http://kuangbaoxu.iteye.com/blog/193076
在HQL中关键字不区分大小写,但是属性和类名区分大小写
一、简单属性查询
1.单一属性查询,返回结果集属性列表,元素类型和实体类中相应的属性类型一致
//查询单个字段 String hql = " select name from Users"; Query query = session.createQuery(hql); List<String> list = query.list(); for(String str : list){ System.out.println(str); } |
输出结果为:
name1
name2
name3
2.多个属性查询,返回的集合元素是对象数组,数组元素的类型和对应的属性在实体类中的类型一致,数组的长度
取决于select中属性的个数
//查询其中几个字段
String hql = " select name,passwd from Users"; Query query = session.createQuery(hql); //默认查询出来的list里存放的是一个Object数组 List<Object[]> list = query.list(); for(Object[] object : list){ String name = (String)object[0]; String passwd = (String)object[1]; System.out.println(name + " : " + passwd); } |
输出结果为:
name1 : password1
name2 : password2
name3 : password3
3.以实体类进行查询
注意:实体类应提供带参和不带参两种构造函数
实体类:MyUser.java
package com.domain;
public class MyUser { private String username; private String password; //因为:String hql = " select new com.domain.MyUser //(name,passwd) from Users";所以必须要有接受2个参数的构造函数 public MyUser(String username,String password){ this.username = username; this.password = password; }
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public String getPassword() { return password; }
public void setPassword(String password) { this.password = password; } } |
查询示例:
//通过query.list()出来的list里存放的不再是默认的Object数组了,而是自定义的类 //MyUser,必须加包名,String hql = "from Users";中的Users类也是必须加包名的, //但是因为在Users.hbm.xml里<hibernate-mapping auto-import="true"> auto-import //默认值为true(所以auto-import属性也可以不写),自动导入了 String hql = "select new com.domain.MyUser(name,passwd) from Users"; Query query = session.createQuery(hql); //默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默 //认的Object数组了,而是MyUser对象了 List<MyUser> myUsers = query.list(); for(MyUser myUser : myUsers){ String name = myUser.getUsername(); String passwd = myUser.getPassword(); System.out.println(name + " : " + passwd); } |
输出结果为:
name1 : password1
name2 : password2
name3 : password3
二、实体对象查询
1.查询整个映射对象所有字段
//直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段
String hql = "from Users"; Query query = session.createQuery(hql); List<Users> users = query.list(); for(Users user : users){ System.out.println(user.getName() + " : " + user.getPassword() +" : " + user.getId()); } |
输出结果为:
name1 : password1 : 1
name2 : password2 : 2
name3 : password1 : 3
这里,采用list查询发出一条查询语句,取得Student对象数据
发出的语句为:
Hibernate: select student0_.id as id1_, student0_.name as name1_, student0_.createTime as
createTime1_, student0_.classesid as classesid1_ from t_student student0_
2.可以忽略select,如:String hql = "from Student";
3.查询表可以用别名,如:String hql = "from Student s";
4.可以忽略select,表可以使用as命名别名,如:String hql = "from Student as s";
5.使用select查询实体对象,必须采用别名,如:String hql = "select s from Student as s";
6.不支持select * from .....这样的查询语句
7.使用Query接口的iterate()方法,如:Iterator iter = session.createQuery("from Student").iterate();
出现N+1问题
所谓的N+1是在查询的时候发出了N+1条sql语句
1: 首先发出一条查询对象id列表的sql
N: 根据id列表到缓存中查询,如果缓存中不存在与之匹配的数据,那么会根据id发出相应的sql语句
8.list和iterate的区别?
* list每次都会发出sql语句,list会向缓存中放入数据,而不利用缓存中的数据
* iterate:在默认情况下iterate利用缓存数据,但如果缓存中不存在数据有可以能出现N+1问题
9.修改默认查询结果(query.list())不以Object[]数组形式返回,以List形式返回
//查询其中几个字段,添加new list(),注意list里的l是小写的。也不需要导入包,这样 //通过query.list()出来的list里存放的不再是默认的Object数组了,而是List集合了
//认的Object数组了,而是List集合了 } |
输出结果为:
name1 : password1
name2 : password2
name3 : password3
10.修改默认查询结果(query.list())不以Object[]数组形式返回,以Map形式返回
//查询其中几个字段,添加new map(),注意map里的m是小写的。也不需要导入包,这样通 //过query.list()出来的list里存放的不再是默认的Object数组了,而是map集合了 String hql = " select new map(name,passwd) from Users"; Query query = session.createQuery(hql);
//默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默 //认的Object数组了,而是Map集合了 List<Map> list = query.list(); for(Map user : list){ //一条记录里所有的字段值都是map里的一个元素,key是字符串0,1,2,3....,value //是字段值 //如果将hql改为:String hql = " select new map //(name as username,passwd as password) from Users";,那么key将不是字符串 //0,1,2...了,而是"username","password"了
//get("0");是get(key),注意:0,1,2...是字符串,而不是整形 String name = (String)user.get("0"); String passwd = (String)user.get("1");
System.out.println(name + " : " + passwd); } |
输出结果为:
name1 : password1
name2 : password2
name3 : password3
11.修改默认查询结果(query.list())不以Object[]数组形式返回,以Set形式返回,但是因为Set里是不允许有重
复的元素,所以:username和password的值不能相同。只需将hql改为:String hql = " select new set
(name,passwd) from Users";
发表评论
-
Criteria查询,DetachedCriteria离线查询 --做综合查询
2011-09-06 00:25 1597通过Session得到Criteria类的对象 Ja ... -
Hibernate批量操作(JDBC批量操作)
2011-09-06 00:24 1293部分内容转自 :http://ga ... -
Hibernate懒加载深入分析
2011-09-06 00:19 1324懒加载可以提高性能吗? 不可以简单的说"能" ... -
getSesson currentSession
2011-09-06 00:15 10001 getCurrentSession创建的session会和 ... -
Hibernate 操作Blob Clob
2011-09-05 23:46 1068Photo.java Java代码 i ... -
Hibernate建表错误,Could not determine type for: java.util.List
2011-04-04 22:19 1642今天遇到 Could not determine type f ... -
Hibernate的fetch="join"和fetch="select"
2011-03-24 14:16 969fetch参数指定了关联对 ... -
Hibernate的Criteria用法总结
2011-03-23 10:53 777最近在项目中使用 Struts 和 Hibernate 进行开 ... -
第29讲--为Spring集成的Hibernate配置二级缓存
2011-03-10 23:16 1101合理的使用缓存策略,往往在web开发中提高性能起到关键作用。 ... -
hibernate抓取策略
2011-02-12 13:23 820Hibernate最让人头大的就是对集合的加载形式。书看了N次 ... -
Hibernate笔记:HQL查询总结(二)——条件查询
2011-02-01 23:35 1507条件查询 1.拼字符串 where条件后面,可以用字 ... -
Hibernate属性延迟加载
2011-02-01 21:28 1012Hibernate3开始增加了通过property节点的la ... -
Hibernate中的cascade和inverse
2011-01-31 00:31 993这两个属性都用于一多对或者多对多的关系中。而inverse特别 ... -
batch_size 和 fetch_size作用
2010-12-01 21:37 1280hibernate抓取策略,,batch-szie在< ... -
hibernate中SQLQuery的addEntity();方法
2010-10-20 10:48 2770如果使用原生sql语句进行query查询时,hibernate ... -
Hibernate的evict方法错误总结
2010-10-14 10:08 1209摘自百度知道:http://zhi ... -
hibernate中get方法和load方法的区别
2010-10-14 09:57 799键字: hibernate get load 区 ... -
Hibernate: 设A引用了B,则删A后可能要evict(A.getB())
2010-10-14 09:56 1000Hibernate: 设A引用了B,如果要先取A删A再取B删B ... -
Hibernate的flush()和evict()总结
2010-10-14 09:53 1324关键字: hibernate flush() evict() ... -
flush,commit,evict
2010-10-14 09:52 921Flush()后只是将Hibernate缓存中的数据提交到数据 ...
相关推荐
总结起来,"韩顺平hibernate笔记及图解"涵盖了Hibernate的基础概念、核心组件、对象关系映射、查询机制、事务管理以及实体间的关系等内容。通过学习这份笔记,开发者能深入理解Hibernate的工作原理和使用技巧,提升...
6. HQL与SQL:Hibernate Query Language(HQL)是Hibernate提供的面向对象的查询语言,类似于SQL,但操作的对象是Java实体。理解HQL的语法结构,如选择、投影、条件、连接、分组和排序等,能帮助你编写出更高效的...
4.3 查询语言HQL:Hibernate Query Language是Hibernate提供的面向对象的查询语言,类似于SQL但更面向对象。 4.4 Criteria API:提供了一种更动态、类型安全的查询方式,避免硬编码HQL,提高代码可读性和可维护性。...
5. Criteria API和HQL(Hibernate Query Language):提供了强大的查询能力,允许开发者用面向对象的方式编写查询,而不是直接写SQL。 在四天的学习笔记中,可能涉及的课程内容包括: - Hibernate环境搭建:介绍...
总结来说,Hibernate笔记涵盖了ORM的核心概念,包括配置、对象模型、事务处理、查询、关联映射以及性能优化等多个方面。通过深入学习,你可以掌握如何高效地利用Hibernate进行数据库操作,提升开发效率和代码质量。
除了上述基本概念,Hibernate还提供了丰富的查询语言——Hibernate Query Language (HQL) 和 Criteria API,它们允许开发者用面向对象的方式编写查询,而不是传统的SQL。 **HQL** 是Hibernate的查询语言,语法类似...
《Hibernate框架开发详解——以黑马程序员2016版讲义和笔记为引导》 Hibernate,作为Java领域中广泛使用的对象关系映射(ORM)框架,极大地简化了数据库操作,使得开发者可以更专注于业务逻辑而不是繁琐的数据访问...
《Hibernate学习笔记——马士兵教程解析》 在Java开发领域,ORM(Object-Relational Mapping)框架的使用已经非常普遍,其中Hibernate作为一款优秀的ORM框架,因其强大的功能和易用性深受开发者喜爱。本文将根据马...
在本篇“2023年Java相关课程系列笔记之十四Hibernate学习笔记”中,我们将深入探讨Java开发中常用的持久化框架——Hibernate。这个框架由梁建全老师主讲,旨在帮助开发者更高效、便捷地进行数据库操作,弥补JDBC在...
SSH是Java开发中广泛使用的三大框架——Struts2、Hibernate和Spring的缩写。这三大框架结合使用,能够构建高效、灵活的企业级Web应用程序。现在,让我们深入探讨这些框架的知识点。 **Struts2笔记** Struts2是MVC...
Hibernate 提供了自己的查询语言——HQL(Hibernate Query Language),它是面向对象的,语法类似SQL。此外,还可以使用 Criteria 查询、Query API 或者最新的JPQL(Java Persistence Query Language)。 7. **...
Hibernate支持多种关联映射,包括一对一、一对多、多对一和多对多,每种映射方式都有其特定的应用场景。同时,理解这些关联关系在数据库中的实现方式,有助于优化数据访问性能。在缓存策略方面,Hibernate提供了第一...
HQL是Hibernate提供的面向对象的查询语言,类似于SQL,但操作的对象是Java实体而非数据库表。它可以实现更高级别的查询,如关联查询、分页查询、条件查询等。 6. Criteria查询 Criteria API是一种更面向对象的...
"Hibernate学习笔记.rar"可能包含关于Hibernate的基本概念、配置、实体类的创建、映射文件的编写、CRUD操作、查询语言HQL和Criteria API的使用等内容,这些都是理解和掌握Hibernate的关键。 "Hibernate3.2官方中文...
在本篇“Hibernate学习笔记”中,我们将深入探讨Hibernate——一个流行的Java对象关系映射(ORM)框架。Hibernate的核心功能是将Java应用程序中的对象模型自动持久化到关系数据库中,简化了数据库操作。通过使用...
它支持HQL(Hibernate Query Language),一种类似于SQL的查询语言,可以在对象层面进行查询。Hibernate还具有缓存机制,提高了数据访问效率,并能自动处理事务,简化了数据库事务管理。 Spring框架则是企业级应用...