Hibernate学习笔记(5)---Query接口

Hibernate中具有三种检索方式(HQL,QBC,SQL)

Query接口

一个查询接口,用于向数据库中查询对象。并控制执行查询的过程。Query接口内封装了一个HQL查询语句。

举个栗子

//查询持久化类user

Session session = sessionFactory.openSession();   //创建session实例
String hql ="from user as u where age>18";    //HQL语句,as别名可以省略不写
Query query = session.createQuery(hql);//创建query实例
List users = query.list();// 返回list集合

  HQL运算符大致上与SQL的相似

= 等于 <> 不等于
> 大于 < 小于
>= 大于等于 <= 小于等于
is null 值为空 is not unll 值不为空
in 等于列表中的某一个值 no in 不等于列表中的某一个值
between 在两个值之间 no between 不在两个值之间
like 字符串匹配 and 逻辑与
or 逻辑或 not 逻辑非

查询所有

from+实体类名

Query query =session.createQuery(from User);
Liset<User> list = query.list();

  

条件查询

from +实体类名 +where 实体类名属性名 ?

Query query =session.createQuery(from User u where u.id=? and u.name=?);
query.setParameter(1,5);
query.setParameter(2,"小明");//向问号里面设置值,有几个问号设置几个
List<User> list = query.list();

排序查询

from 实体类 order by 实体类属性 asc(升)或者desc(降)

分页查询

mysql实现分页 limit关键字,而在hql中语句中不能写limit所有我们得用hibernate的query对象封装的两个类实现分页

Query query = session.createQuery(User);
//设置开始位置
query.setFirstResult(0);
//设置结束位置
query.setMaxResults(3);

投影查询

select 实体类属性名 1 ,实体类名2   from +实体类名

聚集函数查询

聚集函数 count记录数  , sum 相加, avg 平均, max  最大 ,min  最小

select count(*) from 实体类名

更新

使用executeUodate()方法

String hql ="update User set age=23 where age = 20"
Query query = session.createQuery(hql);
query.executeUpdate();

删除

通过使用executeUodate()方法也可以实现删除

String hql ="delete from User where age 20"
Query query = session.createQuery(hql);
query.executeUpdate();

  ps:HQL语句它采用的面向对象的查询方式,并提供了丰富和灵活的查询特征,hibernate中将HQL作为官方推荐的标准查询方式。

下节:另外一种数据查询接口-----Criteria接口(QBC)

时间: 2024-10-11 17:29:28

Hibernate学习笔记(5)---Query接口的相关文章

hibernate学习笔记之四(Hibernate中的类型)

(hibernate学习笔记系列来自于 "疯狂Java" Hibernate视频学习) Hibernate中的类型 在*.hbm.xml文件中,<property name="password" column="t_pass">,hibernate根据type转换将java转换成hibernate类型,然后再转换成SQL类型,<property name="password" type="...&q

hibernate学习笔记之二(初识hibernate)

(hibernate学习笔记系列来自于 "疯狂Java" 视频学习) Hibernate概述 免费开源Java包,可以使程序和数据库的交互变得容易,并更加符合面向对象的设计. 持久化:将数据保存到数据库中 hibernate持久化类步骤 环境搭建 导入jar包,在hibernate包里的\lib\required文件夹里 导入mysql的JDBC驱动 将上述包添加到路径里面 编写持久化类 要求: 在持久化类中一般需要一个id,通常用Integer类型,这样之后操作会使用null,而不是

《Hibernate学习笔记之三》:联合主键的映射

<Hibernate学习笔记之三>:联合主键的映射 就如在前面所举的例子一样,是使用的id作为唯一的主键,一般情况下我们也只使用唯一的一个属性作为主键,但是在实际中,我们可能会遇到几个属性作为主键的情况,因此,在本篇博文中,就来介绍下,联合主键的映射关系应该如何来做?? 联合主键的映射有两种方式来进行实现. 1.使用映射文件 XXX.bhm.xml 2.使用Annotation Hibernate首先需要使用联合主键的实体类必须实现Serializable接口,即为了使序列能够被序列化进行传输

《Hibernate学习笔记十一》:树状结构设计

<Hibernate学习笔记十一>:树状结构设计 这是马士兵老师讲解Hibernate的一个作业题,树状结构设计,这是一个比较典型的例子,因此有必要写篇博文记录下. 树状结构的设计,它是在同一个类中使用了多对一(ManyToOne)和一对多(OneToMany). 在完成这个题目我们应该按照如下的步骤进行: 1.先思考数据库的模型应该是什么样的?? 数据库中的模型应该如下:即存在id p_id 2.思考面向对象的模型,及如何来进行映射??? 根据数据库中表的特点,对象应该有id name;由于

《Hibernate学习笔记八》:组件映射

<Hibernate学习笔记八>:组件映射 前面介绍了一对一的单向.双向外键关联,例如,学生证和学生是一个一对一的关系.这篇博文主要是介绍下组件映射,即一个是另一个的一部分,例如,学生证的信息也可以作为学生信息的一部分,即在数据库中只存在学生一个表,而不是有学生和学生证两个表,并且这两个表中有一个一对一的关联关系. 如下: 有人或许会说,那我们就将学生和学生证的信息写在一个类中,则就不需要组件映射了,确实可以这样,但是,根据类的设计原则,我们一般都会将其设计为两个类,然后将学生证的信息作为一个

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

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

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

Hibernate学习笔记(1)Hibernate配置

一 准备工作 首先我们将创建一个简单的基于控制台的(console-based)Hibernate应用程序. 我们所做的第一件事就是创建我们的开发目录,并且把所有需要用到的Java库文件放进去.解压缩从Hibernate网站下载的Hibernate发布包,并把所有需要的库文件拷到我们项目中去. 学习建User-library-hibernate,并加入相应的jar包 (a)项目右键-buildpath-configure build path-add library (b)选择User-libr

Hibernate学习笔记(2)Hibernate问题

(1)数据库驱动问题 log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment). log4j:WARN Please initialize the log4j system properly. Exception in thread "main" org.hibernate.HibernateException: JDBC Driver class not found: com.m