- 浏览: 71299 次
- 性别:
- 来自: 武汉
-
最新评论
-
spring_springmvc:
spring mvc demo教程源代码下载,地址:http: ...
springmvc -
mrhuangok:
文章条理清晰,帮了我大忙。
springmvc -
kunsyliu:
...
get加密 -
JeffreyJia:
为什么使用JMS 就必须使用 MDB呢?没有必要吧?
基于Spring打造简单高效通用的异步任务处理系统
在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";
发表评论
-
jcl与jul、log4j1、log4j2、logback的集成原理
2017-12-01 15:59 542jcl与jul、log4j1、log4j2、logbac ... -
slf4j与jul、log4j1、log4j2、logback的集成原理
2017-12-01 15:52 431收藏 jd ... -
预编译分析
2017-11-29 10:26 656一.背景: 用Mybatis+my ... -
预编译
2017-11-29 09:57 711PreparedStatement 在说PreparedS ... -
Spring Boot应用的后台运行配置
2017-11-21 14:26 546Spring Boot应用的后台运行配置 酱油一篇,整 ... -
编码
2017-11-21 14:25 528几种常见的编码格式 为什么要编码 不知道大家有没有想过一 ... -
Spring Boot应用的后台运行配置
2017-11-29 09:58 742Spring Boot应用的后台运行配置 酱油一篇, ... -
spring boot 注解
2017-11-01 10:58 349@EnableAutoConfiguration和@Spr ... -
支付话题
2015-09-09 11:45 1455本文档适用人员:交易领域的产品研发人员 提纲: 银 ... -
深入分析 Java 中的中文编码问题
2014-12-19 10:21 605在 IBM Bluemix 云平台上开发并部署您的下一个应 ... -
hashmap死循环
2014-11-24 10:45 758疫苗:Java HashMap的死循环 在淘宝内 ... -
jquery
2014-02-07 09:03 778当你准备使用jQuery,我强烈建议你遵循下面这些指南: ... -
减轻页面压力
2014-01-26 09:04 625网站快速加载,是提供 ... -
linux 命令
2014-01-23 09:20 405一.linux快捷键 Ctrl+C : 终止当前命令 C ... -
mina
2013-10-15 12:49 1383<!--StartFragment --> ... -
spring 线程池
2013-10-12 14:35 687Spring 线程池使用 Spring ... -
性能监控
2013-07-08 10:34 797spring,真是一个好东西;性能,真是个让人头疼又不 ... -
java ftp
2013-06-24 11:05 886在项目中使用到FTP功能,于是采用类似Spring的各种 ... -
json
2013-06-21 14:01 727JSON小结【json-lib】 j ... -
基于Spring打造简单高效通用的异步任务处理系统
2013-05-21 14:24 3939背景 随着应用系统功 ...
相关推荐
Hibernate.jar包,Hibernate可以应用在任何使用JDBC的场合,包含 hibernate-commons-annotations-4.0.1.Final.jar hibernate-core-4.1.12.Final.jar hibernate-ehcache-4.1.12.Final.jar hibernate-entitymanager-...
"Hibernate入门到精通" Hibernate 是一个基于Java的ORM(Object-Relational Mapping,对象关系映射)框架,它提供了一种简洁高效的方式来访问和操作关系数据库。下面是 Hibernate 的主要知识点: Hibernate 简介 ...
hibernate-commons-annotations-4.0.1.Final.jar hibernate-core-4.1.12.Final.jar hibernate-ehcache-4.1.12.Final.jar hibernate-entitymanager-4.1.12.Final.jar hibernate-jpa-2.0-api-1.0.1.Final.jar ...
项目原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6 二、 项目目的: 整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + ...
【hibernate学习资料大全】 Hibernate 是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。这个压缩包包含了丰富的Hibernate学习资源,旨在帮助开发者深入理解和熟练掌握这一强大的...
《Hibernate-Extensions全面指南》 Hibernate,作为Java领域中的一款著名对象关系映射(ORM)框架,极大地简化了数据库操作。然而,为了满足更复杂的业务需求,Hibernate还提供了丰富的扩展功能,这就是我们今天要...
【描述】中的"hibernate的jar包"指的是Hibernate框架的运行库文件,这些JAR文件包含了Hibernate的所有核心API、实现和依赖库,如Hibernate Commons Annotations、Hibernate EntityManager、Hibernate Core等。...
Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发者使用面向对象的方式来操作数据库,极大地简化了数据访问层的编程工作。这个压缩包包含了Hibernate的基础jar包,这些jar文件是开发Hibernate应用所...
HibernateTools是Java开发人员在使用Hibernate ORM框架时的有力辅助工具集,主要目的是为了提高开发效率,简化数据库操作。在HibernateTools 3.2.4版本中,它包含了一系列的特性与插件,以支持更便捷地进行对象关系...
Hibernate3 是一个强大的Java持久化框架,它允许开发者将数据库操作与业务逻辑解耦,使得应用程序的开发更为简便。这个“hibernate3全部jar包:hibernate3.jar.zip”包含了所有必要的库文件,方便用户一次性下载并...
Hibernate3是一个广泛使用的Java对象关系映射(ORM)框架,它允许开发者用面向对象的方式处理数据库操作,极大地简化了Java应用程序与数据库之间的交互。在这个"Hibernate3的依赖包"中,包含了运行Hibernate3应用...
在Java开发环境中,与KingbaseV8数据库进行交互通常会用到Hibernate框架和JDBC驱动。 Hibernate是一个优秀的对象关系映射(ORM)框架,它简化了Java应用程序对数据库的操作,通过将Java对象与数据库表进行映射,...
标题中的“hibernate和MySQL的jar”指的是Hibernate ORM框架与MySQL数据库之间的连接库。Hibernate是一种流行的Java对象关系映射(ORM)工具,它允许开发者使用面向对象的编程方式来操作数据库,而无需直接编写SQL...
标题"Hibernate 中文api 等学习资料"暗示了这是一组针对Hibernate ORM框架的中文学习资源,包括API文档和其他指南,旨在帮助用户更好地理解和使用Hibernate。 描述中的"hibernate orm框架api中文文档,学习资料,...
包含hibernate所有所需jar包还有一些其他包日志包、jpa支持包等: 列如:hibernate-core-5.1.0.Final.jar hibernate-ehcache-5.1.0.Final.jar hibernate-entitymanager-5.1.0.Final.jar hibernate-envers-5.1.0....
### Hibernate2 升级至 Hibernate3 的注意事项 #### 背景与目的 随着技术的发展,软件框架也在不断地更新迭代,以适应更多的需求并优化性能。Hibernate 作为一款流行的 Java 持久层框架,其从版本 2 升级到版本 3...
Hibernate是一款强大的Java持久化框架,它简化了数据库与Java对象之间的交互,使开发者可以更加专注于业务逻辑而不是数据访问层的实现。本压缩包提供的是Hibernate入门所需的jar包,包括了Hibernate的核心库以及与之...
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端...
Hibernate3 是一个非常重要的Java持久化框架,它允许开发者将对象模型与数据库关系模型进行映射,从而简化了数据存取的过程。这个压缩包“hibernate3必要jar包”显然是针对Hibernate3版本的,已经去除了冗余的库文件...
Hibernate 是一个著名的开源对象关系映射(ORM)框架,它为Java开发者提供了便捷的数据持久化方式,使得在Java应用程序中操作数据库变得更加简单。这个“hibernate_3.2官方开发包”包含了所有你需要开发基于...