Hibernate:基于HQL实现数据查询
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实现数据查询的更多相关文章
- hibernate框架学习之数据查询(HQL)
lHibernate共提供5种查询方式 •OID数据查询方式 •HQL数据查询方式 •QBC数据查询方式 •本地SQL查询方式 •OGN数据查询方式 OID数据查询方式 l前提:已经获取到了对象的OI ...
- hibernate框架学习之数据查询(HQL)helloworld
package cn.itcast.h3.hql; import java.util.List; import org.hibernate.Query; import org.hibernate.Se ...
- Hibernate的HQL多表查询
HQL的内连接查询 对于HQL内链接查询,查询的是两张表的数据,这两张表的数据首先是保存在数组之中,然后在将每一个数组保存在List集合之中进行返回 代码片段: @Test // 内连接 public ...
- hibernate框架学习之数据查询(QBC)
lQBC(Query By Criteria)是一种Hibernate中使用面向对象的格式进行查询的计数 lQBC查询方式步骤 •获取Session对象 •初始化Criteria对象(使用Sessio ...
- hibernate框架学习之数据查询(QBC)helloworld
package cn.itcast.h3.query.hql; import java.util.List; import org.hibernate.Criteria; import org.hib ...
- HIbernate基于外键的查询
此文以个人开发记录为目的,笔拙勿喷 项目是背景是公司的E签宝平台VIP频道项目进行关联账户增加后,需要做删除时的,联合查询 当前主要表结构账户表Account. CREATE TABLE `accou ...
- Hibernate之HQL添加过滤器查询的用法
HQL查询过程中支持添加过滤器.使用步骤是这样的: 首先在要查询的实体对象的映射中使用<filter-def>标签配置过滤器,并在相对应的<class>标签中添加对应的< ...
- hibernate框架学习之数据查询(本地SQL)
本地SQL查询方式 lHibernate框架支持使用原生态SQL语句进行操作数据库 l查询对象SQLQuery由Session获取 •SQLQuery sq = s.createSQLQuery(&q ...
- Java_Web三大框架之Hibernate+jsp+HQL分页查询
分页查询无处不在.使用Hibernate+jsp+HQL进行分页查询. 第一步:编写房屋实体类和House.hbm.xml映射. /* * 房屋实体类 */ public class House { ...
随机推荐
- 「PKUSC 2018」真实排名
题目链接 戳我 \(Solution\) 我们将现在所要进行的数设为\(now\) 我们分情况讨论一下 他自己不翻倍 他自己翻倍 我们首先来看看\(1\)操作 如果要满足他对排名没有影响,那么不能进行 ...
- NLP大赛冠军总结:300万知乎多标签文本分类任务(附深度学习源码)
NLP大赛冠军总结:300万知乎多标签文本分类任务(附深度学习源码) 七月,酷暑难耐,认识的几位同学参加知乎看山杯,均取得不错的排名.当时天池AI医疗大赛初赛结束,官方正在为复赛进行平台调 ...
- 方法二破解:Excel工作表保护密码
最简单,复制整表,粘贴在全新的表中.但是有时候会丢失一些元素 在excel2016中实测验证过有效 第1步:在工作表菜单栏上添加[开发工具].方法是:依次单击[文件]--->[选项]---> ...
- 4、Shiro之IniRealm以及用户登录认证,角色认证,权限认证
1.我们在项目test文件夹下面新建resourse文件夹并将她设置为资源文件夹: 2.在resourse文件夹下面新建user.ini文件 user.ini文件里面声明一个用户: 先写一个用户标签[ ...
- GET,POST传值总结
GET和POST是什么?HTTP协议中的两种发送请求的方法. HTTP是什么?HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议. 其实,GET和POST本质上两者没有任何区别.他们都是 ...
- hibernate更新
1.使用对象更新 public void updateImagePath(Weibo weibo){ Session session = HibernateUtil.currentSession(); ...
- Python 笔试集(2):你不知道的 Python 整数
面试题 分别给出下述代码在终端(e.g. IPyhon)中和在程序中的运行结果: a = 256 b = 256 c = 257 d = 257 def foo(): e = 257 f = 257 ...
- 中国MOOC_面向对象程序设计——Java语言_第2周 对象交互_1有秒计时的数字时钟
第2周编程题 查看帮助 返回 第2周编程题,在课程所给的时钟程序的基础上修改 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨提示: 1.本次作业属于Online Judge题目,提交后由系 ...
- Django框架效率问题的解决方法和总…
由于项目的需要,学习了Django框架,Django框架的MTV很清晰,通过MTV能够很好地了解Django框架的内部机理.但是在使用过程中发现了一个严重的问题,就是当有大量IO(写数据库操作)的时候 ...
- 项目中引入kafka
项目如果需要引入kafka,可以从以下几个流程走: 1.pom文件引对应的jar包 <dependency> <groupId>org.apache.kafka</gro ...