hibernate学习(查询)

数据查询是hibernate的一个亮点,hibernate为程序猿提供了多种的查询方式,分为以下三种:

1.hibernate语言查询,也就是我们今天需要说的hql查询,这种查询是完全面向对象的方式来查询,将查询语句封装为对象来进行操作。符合面向对象的思维来维护数据库。

2.hibernate标准化查询:(criteria query)将查询语句封装成对象进行操作。

3.原声sql查询:直接使用标准sql语言来进行查询。

hql查询所有

在学习hql查询之前,我先插入一些记录到userinfo表中:

//解析hibernate.cfg.xml文件
Configuration cfg = new Configuration().configure();
//创建SessionFactory(创建连接池)
SessionFactory factory = cfg.buildSessionFactory();
//创建session
Session session = factory.openSession();
Transaction transaction = session.beginTransaction();
for (int i = 0; i < 80; i++) {
    UserInfo info = new UserInfo();
    info.setUserName("test"+i);
    info.setUserPass(String.valueOf(Math.random()*1));
    session.save(info);
}
transaction.commit();

这里我给userinfo表中一次性插入了80条记录。解下来使用hql查询所有的数据:

String hql = "from UserInfo";
Query query = session.createQuery(hql);
List<UserInfo>lists = query.list();
for (UserInfo userInfo : lists) {
    System.out.println(userInfo.getUserName());
}

这里,查询所有并没像sql中有”select *”那样,而是直接省略了该语句,其实hql和sql是一样的,只不过一切都是面向对象的查询,将需要查询的表名换成对应的实体类名称,将需要查询的字段换成对应实体类的属性,即可。

hql条件查询

1.查询id>10并且id<20的记录

String hql = "from UserInfo where userId > 10 and userId < 20 ";
//或者
String hql = "from UserInfo where userId between 10 and 20 ";

2.按照userId降序排列

String hql = "from UserInfo order by userId desc";

3.使用参数占位符查询

String hql = "from UserInfo where userId between ? and ? order by userId desc";
Query query = session.createQuery(hql);
query.setInteger(0, 30);
query.setInteger(1,40);
List<UserInfo>lists = query.list();

4.绑定有意义的参数占位符

String hql = "from UserInfo where userId between :begin and :end order by userId desc";
Query query = session.createQuery(hql);
query.setInteger("begin", 20);
query.setInteger("end",40);
List<UserInfo>lists = query.list();

5.查询userId值最大的记录

String hql = "select max(userId) from UserInfo";
Query query = session.createQuery(hql);
List<UserInfo>lists = query.list();
Object result = query.uniqueResult();
System.out.println(result);

可以看到由于这里只会查询出一条记录,所以使用query.uniqueResult();来查询。

6.hql分页查询

查询从第3条记录开始,间隔5条记录

String hql = "from UserInfo";
Query query = session.createQuery(hql);
query.setFirstResult(3);
query.setMaxResults(5);
List<UserInfo>lists = query.list();

7.只查询某些字段

String hql = "select new com.mydb.entity.UserInfo(userId,userPass) from UserInfo";
Query query = session.createQuery(hql);
List<UserInfo>lists = query.list();

这里需要注意就是由于这里使用了两个参数的构造函数,因此,需要在UserInfo实体类当中添加这两个参数的构造方法。

或者可以这样写:

String hql = "select userId,userPass from UserInfo";
Query query = session.createQuery(hql);
List lists = query.list();
for (Object object : lists) {
    Object[]objects = (Object[]) object;
    System.out.println(objects[0]+"----++++"+objects[1]);
}

sql查询

查询userinfo表中的所有数据

String sql = "select * from userinfo";
SQLQuery sqlQuery = session.createSQLQuery(sql);
sqlQuery.addEntity(UserInfo.class);
List<UserInfo> lists = sqlQuery.list();
for (UserInfo userInfo : lists) {
    System.out.println(userInfo.getUserName());
}

说明一点:sqlQuery.addEntity(UserInfo.class);是添加hibernate查询以后从object转换到的类型。

好了,关于hibernate的查询,就学习到这里。

时间: 2024-10-11 17:03:45

hibernate学习(查询)的相关文章

[原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Hibernate学习一:Hibernate注解CascadeType

http://zy19982004.iteye.com/blog/1721846 ———————————————————————————————————————————————————————— Hibernate学习一:Hibernate注解CascadeType 博客分类: Hibernate hibernate 一.概念 现有一场景:一个管理员可以管理多个网吧,一个网吧可以被多个管理员管理.从中抽象出一个多对多的例子user-bar. 主控方user:多对多里面里面会有第三张表user_b

【Hibernate学习】 ——ORM(三)

前面几种关系我们以前就经常用,对于继承我们也并不陌生,经常接触的类与类之间的继承用extends关键字,那么在表与表的关系中如何表示呢?下面我们来讲继承映射. 继承有三种实现的策略,单表继承,具体表继承,类表继承.下面来分析一下这三种方式 继承关联类关系  单表继承 每棵类继承树使用一个表,可知,这三个类在一张表中.如下表: 这张表包括了父类,子类的所有属性,通过Type来区分是哪个子类. 对象模型映射到关系模型: <classname="com.bjpowernode.hibernat.

hibernate 学习知识总结

1.最近用hibernate 学会很多知识,总结如下: (1)数据库表格已经设置默认值,在进行数据插入的时候,bean里面不赋值的话,插入之后该字段依旧是null 是因为hibernate默认插入和更新所有字段,如果某些字段不需要操作,需要配置下 (i)xml文件配置方式: <property name="account" type="java.lang.String" insert="false"> <column name=

hibernate学习随记

hibernate学习随记: 一:hibernate的核心类和接口 ①  Configuration 类 它的用处是: 读取hibernate.cfg.xml 管理对象关系映射文件 <mapping resource=””> 加载hibernate 的驱动,url ,用户.. 管理hibernate配置信息 ②  hibernate.cfg.xml ③  对象关系映射文件 ④  SessionFactory (会话工厂) 可以缓存sql语句和数据(称为session级缓存)!! 是一个重量级的

Hibernate学习笔记:第一个程序的搭建

Hibernate学习笔记:第一个程序的搭建 前一段时间对Struts2这个框架有了一点点地了解,很高兴,自己开始学习Hibernate这个框架了.本篇博文将记录下第一个Hibernate程序的搭建过程.其实有时候个人觉得无论我们学习什么语言也好,还是学习什么框架也好,第一个HelloWorld程序真的相当重要,假如 我们在学习第一个HelloWorld程序都跑不出来,这完全影响着我们对新接触的东西的兴趣和动力,但是,往往第一个程序都会涉及到很多的配置,因此使得对于初学者要摸索一定的时间,对于我

hibernate学习系列-----(2)hibernate核心接口和工作机制

在上一篇文章hibernate学习系列-----(1)开发环境搭建中,大致总结了hibernate的开发环境的搭建步骤,今天,我们继续了解有关hibernate的知识,先说说这篇文章的主要内容吧: Configuration类 SessionFactory接口 Session接口 Transaction接口 Query和Criteria接口 下面就进行分类别地详细说明: Configuration类 功能描述:Configuration类负责管理Hibernate的配置信息作并根据配置信息启动H

hibernate学习笔记之三(一级缓存的使用和管理)

(hibernate学习笔记系列来自于 "疯狂Java" Hibernate视频学习) 一级缓存 一级缓存生命周期很短,与session生命周期一致,所以一级缓存也叫session级缓存或事务级缓存.位于缓存中的对象处于持久化状态,它与表中的相关记录对应,session能够在某些时间点,按照缓存中持久化对象的属性来同步数据库中表的记录,这一过程称为清理缓存. 一级缓存实现原理. session缓存是由它的实现类sessionImpl中定义的一些集合属性构成的,原理是保证有一个引用在关联

Hibernate学习笔记(3)

两年前曾经学习过Hibernate,也通过博客将Hibernate的学习过程记录下来了,地址如下: Hibernate学习笔记(1) Hibernate学习笔记(2) 最近在复习Hibernate,在重新学习的过程中,有了一些新的体会和收获,现在将其总结成博客,供以后作为参考资料使用. 一.导入相应的jar包 目前Hibernate更新到了4.x版本,在官网下载后,找到lib文件加中的required文件夹,此外还需要额外导入log4j和数据库驱动包. 二.创建Hibernate配置文件 在sr