HQL ( Hibernate Query Language ) 查询语言是面向对象的查询语言,也是在 Hibernate 中最常见的。其语法和 SQL 语法有一些相似,功能十分强大,几乎支持除特殊 SQL 扩展外的所有查询功能。此种查询方式为 Hibernate 官方推荐的标准查询方式。

  以下我直接使用上一篇文章配置好的持久化类和工具类来写。

  这篇文章我多以代码的形式来说明 HQL 语法的使用。

1、基本语法查询

// 基本语法

    @Test
public void fun1() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
// -----------------------------------------------------
String hql = "from Customer";
Query query = session.createQuery(hql);
List<Customer> list = query.list();
System.out.println(list); // -----------------------------------------------------
tx.commit();
session.close();
}

2、条件查询

// 条件查询

    @Test
public void fun2() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
// -----------------------------------------------------
String hql = "from Customer where cust_id = ?";
String hql1 = "from Customer where cust_id = :id";//另外一种查询语句写法
Query query = session.createQuery(hql1);
// query.setParameter(0, 2l);
query.setParameter("id", 2l);
List<Customer> list = query.list();
System.out.println(list); // -----------------------------------------------------
tx.commit();
session.close();
}

3、排序查询

// 排序

    @Test
public void fun3() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
// -----------------------------------------------------
String hql = "from Customer order by cust_id asc";// asc:升序 desc:降序
Query query = session.createQuery(hql);
List<Customer> list = query.list();
System.out.println(list); // -----------------------------------------------------
tx.commit();
session.close();
}

4、分页查询

// 分页查询

    @Test
public void fun4() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
// -----------------------------------------------------
String hql = "from Customer";
Query query = session.createQuery(hql);
// 开始的下标=(当前页数-1)*每页条数
query.setFirstResult(0);
query.setMaxResults(3);
List<Customer> list = query.list();
System.out.println(list); // -----------------------------------------------------
tx.commit();
session.close();
}

5、聚合函数查询

// 统计查询
// count
// sum
// avg
// max
// min @Test
public void fun5() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
// -----------------------------------------------------
String hql1 = "select count(*) from Customer"; // 统计条数
String hql2 = "select sum(cust_id) from Customer"; // 求和
String hql3 = "select avg(cust_id) from Customer"; // 求平均值
String hql4 = "select max(cust_id) from Customer"; // 求最大值
String hql5 = "select min(cust_id) from Customer"; // 求最小值
Query query = session.createQuery(hql3);
Number result = (Number) query.uniqueResult();
System.out.println(result); // -----------------------------------------------------
tx.commit();
session.close();
}

6、投影查询

// 投影查询

    @Test
public void fun6() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
// ----------------------------------------------------- String hql1 = "select new Customer(cust_id,cust_name) from Customer";
Query query = session.createQuery(hql1);
List<Customer> list = query.list();
System.out.println(list); // -----------------------------------------------------
tx.commit();
session.close();
}

  

  以上查询都是单表查询,没有涉及多表查询,多表查询等我们熟悉好这几个查询,才继续学习多表查询。多表查询比单表查询复杂一点点。

Hibernate 框架 -HQL 语法的更多相关文章

  1. Hibernate框架HQL语句

    这篇随笔将会记录hql的常用的查询语句,为日后查看提供便利. 在这里通过定义了三个类,Special.Classroom.Student来做测试,Special与Classroom是一对多,Class ...

  2. hibernate框架学习笔记10:HQL查询详解

    HQL语句中不可以出现与表有关的内容,而是对象的属性 实体类(注意配置文件): package domain; import java.util.HashSet; import java.util.S ...

  3. hibernate框架学习之数据查询(HQL)

    lHibernate共提供5种查询方式 •OID数据查询方式 •HQL数据查询方式 •QBC数据查询方式 •本地SQL查询方式 •OGN数据查询方式 OID数据查询方式 l前提:已经获取到了对象的OI ...

  4. Hibernate框架之HQL查询与Criteria 查询的区别

    Hibernate框架提供了HQL查询和Criteria 查询.下面对这两种查询分别做个例子.也好对这两种查询方法有个大概的了解.就用房屋信息表做例子,查询所有房屋信息. HQL语句查询所有房屋信息: ...

  5. 用Hibernate框架把hql生成可执行的sql语句-Oracle方言

    引言:为什么这样的需求,源自公司项目需要,公司的项目使用java的struts2+spring2.5+oracle中间件tuxedo,数据库用的是Oracle,但由于不直接连接数据库,用中间件处理的方 ...

  6. Java_Web三大框架之Hibernate+jsp+HQL分页查询

    分页查询无处不在.使用Hibernate+jsp+HQL进行分页查询. 第一步:编写房屋实体类和House.hbm.xml映射. /* * 房屋实体类 */ public class House { ...

  7. hibernate框架

    在之前的DAO开发中,对关系型数据库进行增删改查都是直接通过sql语句,需要人工的进行对象和表之间的转换.而Hibernate提供了对象和表之间进行映射的框架,使得这种转换更加方便. 1.ORM概念 ...

  8. Hibernate框架--配置,映射,主键

    SSH框架: Struts框架, 基于mvc模式的应用层框架技术! Hibernate,    基于持久层的框架(数据访问层使用)! Spring,   创建对象处理对象的依赖关系以及框架整合! Da ...

  9. Hibernate框架进阶(上篇)

    导读 前面一片文章介绍了Hibernate框架的入门,主要是讲解Hibernate的环境搭建和简单测试,有兴趣的童鞋出门左转.本文在入门的基础上进行Hibernate的进阶讲解,分为上中下三篇,本篇为 ...

随机推荐

  1. docker数据目录迁移

    一.描述 docker默认的数据目录为/var/lib/docker,有的系统数据盘挂载在其他目录下,比如/home为数据盘,这时需要将docker数据目录更改,除了修改docker配置文件的方法,还 ...

  2. 转:OAuth2 深入介绍

    OAuth2 深入介绍 1. 前言 2. OAuth2 角色 2.1 资源所有者(Resource Owner) 2.2 资源/授权服务器(Resource/Authorization Server) ...

  3. HDU-6114

    車是中国象棋中的一种棋子,它能攻击同一行或同一列中没有其他棋子阻隔的棋子.一天,小度在棋盘上摆起了许多車--他想知道,在一共N×M个点的矩形棋盘中摆最多个数的車使其互不攻击的方案数.他经过思考,得出了 ...

  4. Codeves 4279 线段树练习5

    有n个数和5种操作 add a b c:把区间[a,b]内的所有数都增加c set a b c:把区间[a,b]内的所有数都设为c sum a b:查询区间[a,b]的区间和 max a b:查询区间 ...

  5. 洛谷 题解 P2645 【斯诺克】

    吐槽一下这道题: 数据太水了!!! 请注意,这题如果你考虑了犯规的情况,那么你的分数...可能会和我一样,只有40分. 也就是说,这是一篇AC不了这道题的题解!!! 现在,我来讲一下这道题的正解: 两 ...

  6. 什么是RESTful?RESTfule风格

    导读 理解什么是REST之前,先去脑补以下什么是HTTP,参考[Http协议] 什么是REST? REST(英文:Representational State Transfer,简称REST,意思:表 ...

  7. markdownPad在win10下渲染报错问题

    今天使用MarkdownPad 2,打开后发现预览效果出错了,本来以为自己下载了破解版的缘故导致软件不稳定,后来查找了网上,发现这是一个普遍的问题,根据软件的提示来到官方FAQ页面,找到解决方法. 实 ...

  8. 深度优先搜索 & 广度优先搜索

    目录 邻接表 邻接表的深度优先搜索 邻接表的广度优先搜索 临接数组 临接数组的深度优先搜索 临接数组的广度优先搜索 二叉树 二叉树的深度优先搜索 二叉树的广度优先搜索 邻接表 邻接表的深度优先搜索 假 ...

  9. 修改element-ui默认属性

    修改element ui默认的样式 如果要组件内全局修改 首先在浏览器里F12找到element默认的UI类名 找到要修改的默认类名以后 在文件中修改代码,重写属性 <style> .el ...

  10. 【Maven】聚合

    [Maven]聚合 转载: 使用聚合一次能为多个 maven 项目执行命令,而不用到每一个项目下去执行命令. 聚合 pom 的特殊之处 1.packaging 配置 pom <packaging ...