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. 新年第一发--HDU1848--Fibonacci again and again(SG函数)

    Problem Description 任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样定义的:F(1)=1;F(2)=2;F(n)=F(n-1)+F(n-2 ...

  2. kafka 消费者拉取消息

    本文只跟踪消费者拉取消息的流程.对于 java 客户端, kafka 的生产者和消费者复用同一个网络 io 类 NetworkClient. 入口在 KafkaConsumer#pollOnce 中, ...

  3. 使用C#分层查询多个表数据

    下面我来给大家叙述一下视野分层加载多张表数据: 首先创建一个StudentExtends类: 在DAL层studentDAL类写如下代码: 在BLL层写如下代码,引用DAL层的LoadStudentI ...

  4. Unity UI —Text

    Character Text 文本字体的编辑 Font Style 字体格式可以自行下载也可在windows自带字体中查找 Font Size 字体尺寸 Line Spacing 行距 Rich Te ...

  5. golang 导出CSV文件中文乱码的问题

    golang  导出CSV文件中文乱码的问题 解决办法: 在csv文件的开头写入 UTF-8 BOM // 创建文件 dstf, err := os.Create("./data/" ...

  6. P站图片下载工具。

    下载 Pixiv 的图片比较麻烦,就做了这么个东西. 主要就是用 HttpWebRequest HttpWebResponse 下载了网页的 html 代码然后截取里面的内容.代码上传到了文件里. p ...

  7. Matlab——数值计算——单个代数方程 代数方程组

    方程求解 求解单个代数方程 MATLAB具有求解符号表达式的工具,如果表达式不是一个方程式(不含等 号),则在求解之前函数solve将表达式置成等于0. >> syms a syms b ...

  8. Scratch少儿编程系列:(一)版本的选择及安装

    工欲善其事必先利其器,为了使用Scratch,首先要到官网上下载相关软件. 官网链接地址为:https://scratch.mit.edu/download,我用的是Windows系统,下载对应的安装 ...

  9. Java基础之 多线程

    一.创建多线程程序的第一种方式: 继承(extends) Thread类 Thread类的子类: MyThread //1.创建一个Thread类的子类 public class MyThread e ...

  10. Android - Unable to add window android.view.ViewRootImpl$W@6518342 -- permission denied for window type 2133

    因为跟博主碰到了一样的问题,所以记录一下分析原理 原文链接:https://www.jianshu.com/p/b0364074288a 首先,先介绍下背景环境,第一,是Android7.0,其次,要 ...