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. SQL中的schema()函数可替代database()

  2. Redis单节点部署

    安装Redis 由于REDIS使用单线程处理请求,CPU的快慢最对REDIS的性能有较大影响,官方建议INTEL的CPU,其效率能比AMD高一倍左右. 下载Redis:wget http://down ...

  3. yanse

    0E71F9   左上面蓝色 0EA8FF 左下面蓝色 498B54  右边绿色

  4. Python基础面试题库

    Python基础面试题库   Python是一门学习曲线较为容易的编程语言,随着人工智能时代的到来,Python迎来了新一轮的高潮.目前,国内知乎.网易(游戏).腾讯(某些网站).搜狐(邮箱).金山. ...

  5. 十、Springboot之thymeleaf与jsp共存

    : pom.xml添加依赖 <!--thymeleaf整合JSP需要用到下面的依赖--> <dependency> <groupId>org.thymeleaf&l ...

  6. OpenStack Nova Placement API 统一资源管理接口的未来

    目录 目录 Placement API 为何称之为 "未来" 操作对象基本概念 数据库操作样例 Placement API 在创建虚拟机时的调度过程 Placement REST ...

  7. LeetCode All in One 题目讲解汇总(转...)

    终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 如果各位看官们,大神们发现了任何错误,或是代码无法通 ...

  8. 大sd卡 裂开了,写保护掉了。重新装好后,被写保护的解决办:

    大sd卡 裂开了,写保护掉了.重新装好后,被写保护的解决办: 1.用烙铁把写保护附近的塑料往外顶一点点,就ok   别太热,也别劲太大.容易过,不能破坏原来的部分. 解决问题. 总结: 写保护,就是检 ...

  9. Windows下对函数打桩,及Linux类似技术

    一个简单的桩实现类: #define JMPCODE_LENGTH 5 //x86 平坦内存模式下,绝对跳转指令长度 #define JMPCMD_LENGTH 1 //机械码0xe9长度 #defi ...

  10. Spring源码入门——DefaultBeanNameGenerator解析 转发 https://www.cnblogs.com/jason0529/p/5272265.html

    Spring源码入门——DefaultBeanNameGenerator解析   我们知道在spring中每个bean都要有一个id或者name标示每个唯一的bean,在xml中定义一个bean可以指 ...