HQL:  hibernate query language(hibernate特有的查询语言)

  hql是基于对象的查询语言,其语法与sql类似,但是他和sql的区别在于sql是面向表和字段的查询,而hql是面向对象和属性的查询。

需求1. 查询出所有的项目

 @Test
public void testFindAllPorject(){
//获取hibernate session
Session session = HibernateUtils.getSession();
//定义hql语句
String hql = "select project from com.deng.hibernate.bean.Project project"; // "select * from project";
//创建一个查询对象Query
Query query = session.createQuery(hql);
//调用query的相关方法来执行相关的动作
List<Project> list = query.list();
System.out.println(list);
session.close();
}

需求2. 根据给定项目的地址模糊查询,并按照创建时间倒叙排列(hql中带参数的查询)

 @Test
public void testFindPorjectByCondition(){
//获取hibernate session
Session session = HibernateUtils.getSession();
String addr = "龙";
//定义hql语句
String hql = "from com.deng.hibernate.bean.Project project " +
// " where project.address like ? " + 基于问号的参数
" where project.address like :myaddr " +//基于命名的参数,冒号是命名参数的语法开始
" order by project.createTime desc"; // "select * from project";
//创建一个查询对象Query
Query query = session.createQuery(hql);
//设置参数,需要注意,问号参数的位置从0开始
query.setString("myaddr","%"+addr+"%");
// query.setString(0,"%"+addr+"%");
//调用query的相关方法来执行相关的动作
List<Project> list = query.list();
System.out.println(list);
session.close();
}

需求3:查询出公司名包含【新希望】的公司下的所有的项目。

  项目和 公司的关系是多对一,在Project对象中有

  @Basic
@ManyToOne
@JoinColumn(name = "company_id")
public Company getCompany() {
return company;
}

此时的做法:

@Test
public void testFindProjectByCompanyName(){
Session session = HibernateUtils.getSession();
String hql = "from com.deng.hibernate.bean.Project p where " +
" p.company.companyName like :cname ";
Query query = session.createQuery(hql);
query.setString("cname","%新希望%");
List<Project> list = query.list();
System.out.println(list); session.close();
}

需求4. 查询出所有的项目,根据创建时间倒叙排列,要求是第三页的数据(每页3行)

@Test
public void testFindProjectByPage(){
Session session = HibernateUtils.getSession();
String hql = "from com.deng.hibernate.bean.Project p order by p.createTime desc";
Query query = session.createQuery(hql);
//设置结果集的起始索引,也就是从多少行开始取
query.setFirstResult(6);
//设置最多获取多少条数据
query.setMaxResults(3);
List<Project> list = query.list();
System.out.println(list); session.close();
}

需求5. 获取总共有多少个项目

@Test
public void testCountProject(){
Session session = HibernateUtils.getSession();
String hql = "select count(1) from com.deng.hibernate.bean.Project p ";
Query query = session.createQuery(hql);
//uniqueResult 返回唯一的结果
Long count = (Long)query.uniqueResult();
System.out.println("----------->"+count);
session.close();
}

需求6. 统计每个项目的可租面积和产权面积的综合

 //查询出所有资源的可租面积总和,产权面积总和
@Test
public void testSumResource(){
Session session = HibernateUtils.getSession(); String hql = "select res.project, sum(res.measureArea) as allArea,sum(res.canLeaseArea) as can from Resource res " +
" group by res.project";
Query query = session.createQuery(hql);
//有多行数据时
List<Object[]> list = query.list();
//只有一行数据
// Object[] obj = (Object[])query.uniqueResult();
// System.out.println(obj[0]);
// System.out.println(obj[1]); session.close();
}

Hibernate:基于HQL实现数据查询的更多相关文章

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

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

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

    package cn.itcast.h3.hql; import java.util.List; import org.hibernate.Query; import org.hibernate.Se ...

  3. Hibernate的HQL多表查询

    HQL的内连接查询 对于HQL内链接查询,查询的是两张表的数据,这两张表的数据首先是保存在数组之中,然后在将每一个数组保存在List集合之中进行返回 代码片段: @Test // 内连接 public ...

  4. hibernate框架学习之数据查询(QBC)

    lQBC(Query By Criteria)是一种Hibernate中使用面向对象的格式进行查询的计数 lQBC查询方式步骤 •获取Session对象 •初始化Criteria对象(使用Sessio ...

  5. hibernate框架学习之数据查询(QBC)helloworld

    package cn.itcast.h3.query.hql; import java.util.List; import org.hibernate.Criteria; import org.hib ...

  6. HIbernate基于外键的查询

    此文以个人开发记录为目的,笔拙勿喷 项目是背景是公司的E签宝平台VIP频道项目进行关联账户增加后,需要做删除时的,联合查询 当前主要表结构账户表Account. CREATE TABLE `accou ...

  7. Hibernate之HQL添加过滤器查询的用法

    HQL查询过程中支持添加过滤器.使用步骤是这样的: 首先在要查询的实体对象的映射中使用<filter-def>标签配置过滤器,并在相对应的<class>标签中添加对应的< ...

  8. hibernate框架学习之数据查询(本地SQL)

    本地SQL查询方式 lHibernate框架支持使用原生态SQL语句进行操作数据库 l查询对象SQLQuery由Session获取 •SQLQuery sq = s.createSQLQuery(&q ...

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

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

随机推荐

  1. WebClient上传下载文件,小白篇

    WebClient的上传文件一直报错,各种百度各种稀奇古怪的东西,终于百度到一篇小白学习篇 转自: https://www.cnblogs.com/cncc/p/5722231.html 使用C#We ...

  2. [design pattern](7) Singleton

    前言 上面的章节中,我们介绍了工厂模式,它是创建型模式的一种.本章我们将会介绍 单例模式 ,它也是创建型模式的一种.单例模式是我们比较常用的一个设计模式,也是最简单的一种设计模式. 单例模式 介绍:确 ...

  3. Hbase meta 表异常修复

    Hbase meta表异常修复 标签(空格分隔): Hbase 一,Hbase meta元数据表 1.1 背景 线上Hbase 因为在hbase shell中清空 truncate 'table'一张 ...

  4. 五大 JAVA Web 框架的优缺点对比,Spring MVC 领先

    毫无疑问,Java 是当今世界上最重要的编程语言之一.js 框架给程序员提供了 一个可以构建程序的坚实基础.它包括定义的类和功能,用于硬件设备管理,与系统软件交互并处理输入,让开发人员变得更轻松.Ja ...

  5. 第五周总结 & 实验报告(三)

    第五周总结 一.继承       1.类的继承格式 class 父类{} class 子类 extends 父类{} 2.扩展类的功能 class 父类{ 父类属性: .......... ..... ...

  6. 九、SpringBoot集成Thymeleaf模板引擎

    Thymeleaf咋读!??? 呵呵,是不是一脸懵逼...哥用我的大学四级英文知识告诉你吧:[θaimlif]. 啥玩意?不会音标?...那你就这样叫它吧:“赛母李府”,大部分中国人是听不出破绽的.. ...

  7. 自定义配置节点configSections的使用

    //App.config <?xml version="1.0" encoding="utf-8" ?><configuration>  ...

  8. node初始化配置no

    原文链接:https://blog.csdn.net/jianleking/article/details/79130667 引言: 很久没有在windows上配过node, 记得以前node环境变量 ...

  9. Delphi IDE使用的一些主要技巧

    Delphi IDE使用的一些主要技巧 1.查找和替换 (1)<ctrl>+F[1]:选择页“Find”,进行查找,则根据查找方向继续查找.选择页“Findin Files”,则进行该工程 ...

  10. eclipse code recommenders cannot download its model repository index

    Cent OS 7 运行 eclipse oxygen 代码提示出现标题所示的错误,解决办法,将网络提供程序设置为手动即可解决. Window->Preference->General-& ...