Hibernate中hql的基本查询、条件查询、排序插叙、分页查询、投影查询
hql语句和sql语句不同,当我们使用hql语句查询时,要把SQL语句的表写成 实体类的类名,字段写成实体类的属性
- 基本查询:查出数据库中所有的数据
代码如下:
//基本查询,查询所有的实体@Testpublic void test1() {//获取当前线程的sessionSession s = HibernateUtils.getCurrentSession();Transaction t = s.beginTransaction();Query query = s.createQuery("from Customer");List list = query.list();for(Object o : list) {System.out.println(o);}t.commit();}
我们应当注意这段代码:
Query query = s.createQuery("from Customer");
执行的hql语句是:from Customer
但如果我们使用sql,语句是:
select * from cst_customer(cst_customer是我数据库中的表名)
其中我们可以发现,使用hql只要把sql的表名换成实体类名就可以了,而且 select * 都可以不要
- 条件查询:按条件查询出数据库的数据
代码如下:
//条件查询@Testpublic void test2() {Session s = HibernateUtils.getCurrentSession();Transaction t = s.beginTransaction();//Query query = s.createQuery("from Customer where custName = ?");//取别名Query query = s.createQuery("from Customer where custName = :custName");//query.setString(0, "23");//query.setParameter(0, "23");query.setParameter("custName", "23");List list = query.list();for(Object o : list) {System.out.println(o);}t.commit();}
当我们使用条件查询时,我们不仅要把表名换成实体类,还要把数据库的列名换成属性名:
from Customer where custName = ?
然后使用下面代码设置参数:
query.setString(0, "23");
可以发现我把这些代码注释掉了,这些方法不够具体,我们可以使用别名设置参数,如下代码
from Customer where custName = :custName
:后面的是别名,我们给参数赋值时可以使用一下代码就不用考虑具体参数的类型了
query.setParameter("custName", "23");
- 排序插叙:order by
//排序查询@Testpublic void test3() {Session s = HibernateUtils.getCurrentSession();Transaction t = s.beginTransaction();//根据custId排序Query query = s.createQuery("from Customer order by custId");List list = query.list();for(Object o : list) {System.out.println(o);}t.commit();}
- 分页查询:使用 order by ,在后面加上属性名就可以了
@Testpublic void test4() {Session s = HibernateUtils.getCurrentSession();Transaction t = s.beginTransaction();//查询全部数据,每页显示两条数据Query query = s.createQuery("from Customer");query.setFirstResult(0);query.setMaxResults(2);List list = query.list();for(Object o : list) {System.out.println(o);}t.commit();}
- 投影查询: 当我们在查询实体时,只需要部分实体的属性。并且希望返回的结果使用实体类封装,而不是Object[]
使用步骤:1、查询语句需要使用new关键字
2、在实体类中添加对应参数列表的构造函数
代码如下:
@Testpublic void test5() {Session s = HibernateUtils.getCurrentSession();Transaction t = s.beginTransaction();Query query = s.createQuery("select new domain.Customer(custId,custName) from Customer");List list = query.list();for(Object o : list) {System.out.println(o);}t.commit();}
在实体类中添加对应参数列表的构造函数,注意无参构造函数实体类中一定不能省
public Customer(Long custId, String custName) {this.custId = custId;this.custName = custName;}
注意在使用hql语句时,实体类要加上路径,因为在一个工程里,当有多个相同类名,就不知道创建那个实体类了
Hibernate中hql的基本查询、条件查询、排序插叙、分页查询、投影查询相关推荐
- jpa 动态查询条件 数组_Spring data jpa 复杂动态查询方式总结
一.Spring data jpa 简介 首先JPA是Java持久层API,由Sun公司开发, 希望整合ORM技术,实现天下归一. 诞生的缘由是为了整合第三方ORM框架,建立一种标准的方式,目前也是 ...
- 什么事java中hql语句,hibernate中hql语句详解
之前给大家讲了一下hibernate分页查询的内容,那么下面就要接着给大家对hibernate中hql语句方面的知识进行一下详细的讲解,一起来了解一下吧. 刚开始做项目的时候,项目当中的hql语句就是 ...
- Hibernate中HQL函数汇总及其说明
2019独角兽企业重金招聘Python工程师标准>>> Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lang ...
- oracle入门(8)——实战:支持可变长参数、多种条件、多个参数排序、分页的存储过程查询组件...
[本文介绍] 学了好几天,由于项目需要,忙活了两天,写出了个小组件,不过现在还只能支持单表操作.也没考虑算法上的优化,查询速度要比hibernate只快了一点点,可能是不涉及多表查询的缘故吧,多表的情 ...
- Hibernate中的JPA 2.1条件删除/更新和临时表
从JPA 2.0版开始, EntityManager提供了方法getCriteriaBuilder()来动态构建选择查询,而无需使用Java持久性查询语言(JPQL)进行字符串连接. 在2.1版中,此 ...
- MySQL操作之条件,排序,分页,聚合函数,分组,连接,子查询,自连接查询总结...
-- 查询练习-- 查询所有字段-- select * from 表名;select * from students;-- 查询指定字段-- select 列1,列2,... from 表名;sele ...
- kibana 写两个查询条件_Kibana使用之Lucene的语法查询
转载地址 Kibana使用的查询语法是Lucene的查询语法,这里在使用Kibana的同事一定要注意,不然,在进行搜索的时候,你会抓狂的. 下面了解下Lucene的查询语法,了解了Lucene的查询语 ...
- MybatisPlus查询条件和排序高级封装
1.查询注解 import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java. ...
- ElasticSearch学习篇2_Rest格式操作(索引、文档)、文档的简单操作(增、删、改、查)、复杂查询操作(排序、分页、高亮)
目录 关于索引的基本操作 声明索引.字段类型 获取索引信息举栗 删除索引举栗 拓展命令 关于文档的基本操作 插入文档 删除文档 修改文档 获取文档 根据id获取 根据条件获取 带json参数体的查询( ...
最新文章
- 把Doc文档转换成rtf格式
- POSTMAN 数据关联
- 文本编辑器查看 cprintf颜色_airWriter for mac(文本编辑软件)
- 文件上传与下载----SpringMVC
- TTL电平、CMOS电平、RS232通信电平的概念及区别
- 极客c语言课程设计,c语言课程设计之实习报告共5天完整.doc
- HTTPS中间人攻击实践(原理·实践)
- ASP.NET教程4
- 安防在智能家居中扮演什么角色?
- py3使用py3Fdfs
- Unable to start ServletWebServerApplicationContext due to missing ServletWeb解决办法
- 网络安全与网站安全及计算机安全:如何下载到Windows各版本的Nmap网络扫描神器
- 什么是hql,与sql的区别
- NLP数据预处理与词嵌入
- Web Confidential for mac(密码信息管理软件)
- 用pip给python安装matplotlib库-windows
- Shell中获取当前脚本路径
- 京东健康和药明康德入股卫宁软件,分别持有7.7%股权
- iDesktop、iObjects “打开数据库型数据源”出错解决方法
- 快速将证件照压缩到小一寸,这款工具值得收藏