分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

Hibernate:基于HQL实现数据查询

发布时间:2023-09-06 01:14责任编辑:顾先生关键词:Hibernate

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实现数据查询

原文地址:http://www.cnblogs.com/dengcl/p/7609858.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved