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. zz:NETCONF协议详解

    随着SDN的大热,一个诞生了十年之久的协议焕发了第二春,它就是NETCONF协议.如果你在两年前去搜索NETCONF协议,基本得到的信息都是"这个协议是一个网管协议,主要目的是弥补SNMP协 ...

  2. DOM中操作结点的属性_操作元素结点的样式

    有俩种方式操作结点的属性. 首先我们需要先获取所要操作的结点元素: var uname=document.getElementById("uname"); var gan=unam ...

  3. Spring Boot 搭建TCP Server

    本示例首选介绍Java原生API实现BIO通信,然后进阶实现NIO通信,最后利用Netty实现NIO通信及Netty主要模块组件介绍. Netty 是一个异步事件驱动的网络应用程序框架,用于快速开发可 ...

  4. Linux中Postfix反病毒和垃圾邮件(十)

    amavisd-new amavisd-new呼叫器是一个连接MTA和内容检测工具(诸如病毒扫描工具和SpamAssassin)的高性能接口程序,使用perl语言写成.它一般通过SMTP.ESMTP或 ...

  5. ARTS-S docker里程序通过ip访问外部数据库

    要先确保外部数据库能通过ip访问,然后启动docker的时间加参数--network host,如 docker run \ --name fcheck_async_worker \ -it \ -v ...

  6. Python如何实现微信群万人同步直播?

    很多人传言微信网页版(https://wx.qq.com/)接口已经被封了,所以所有的微信都不能登录网页版,这是错误的. 2019年7月微信对网页版微信进行了动态安全策略调整,导致一大批微信号不能登录 ...

  7. 国内下载vscode速度慢解决

    找到对应的文件,点击下载,会出现一个类似下面的链接: https://az764295.vo.msecnd.net/stable/f06011ac164ae4dc8e753a3fe7f9549844d ...

  8. Python3 文件处理

    目录 文件操作的流程 文件的三种打开模式 读取: rt read_text 针对文本内容只读 清空写入: wt write_text 针对文本内容只写 追加写入: at append_text 针对文 ...

  9. KVM虚拟机快照备份

    KVM 快照的定义:快照就是将虚机在某一个时间点上的磁盘.内存和设备状态保存一下,以备将来之用.它包括以下几类: (1)磁盘快照:磁盘的内容(可能是虚机的全部磁盘或者部分磁盘)在某个时间点上被保存,然 ...

  10. netcore 创建腾讯云私有镜像 发布到docker 实战

    上一篇博客写的 netcoer上传到docker ,编译 并发布,传送门:FineUICore基础版部署到docker实战 这是一种笨方法,理想的方法是,在本地编译成镜像,然后推送到镜像仓库,服务器的 ...