hql语句和sql语句不同,当我们使用hql语句查询时,要把SQL语句的表写成 实体类的类名,字段写成实体类的属性

  1. 基本查询:查出数据库中所有的数据
    代码如下:
//基本查询,查询所有的实体@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 * 都可以不要

  1. 条件查询:按条件查询出数据库的数据
    代码如下:
//条件查询@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");
  1. 排序插叙: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();}
  1. 分页查询:使用 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();}
  1. 投影查询: 当我们在查询实体时,只需要部分实体的属性。并且希望返回的结果使用实体类封装,而不是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的基本查询、条件查询、排序插叙、分页查询、投影查询相关推荐

  1. jpa 动态查询条件 数组_Spring data jpa 复杂动态查询方式总结

    一.Spring data jpa 简介 首先JPA是Java持久层API,由Sun公司开发, 希望整合ORM技术,实现天下归一.  诞生的缘由是为了整合第三方ORM框架,建立一种标准的方式,目前也是 ...

  2. 什么事java中hql语句,hibernate中hql语句详解

    之前给大家讲了一下hibernate分页查询的内容,那么下面就要接着给大家对hibernate中hql语句方面的知识进行一下详细的讲解,一起来了解一下吧. 刚开始做项目的时候,项目当中的hql语句就是 ...

  3. Hibernate中HQL函数汇总及其说明

    2019独角兽企业重金招聘Python工程师标准>>> Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lang ...

  4. oracle入门(8)——实战:支持可变长参数、多种条件、多个参数排序、分页的存储过程查询组件...

    [本文介绍] 学了好几天,由于项目需要,忙活了两天,写出了个小组件,不过现在还只能支持单表操作.也没考虑算法上的优化,查询速度要比hibernate只快了一点点,可能是不涉及多表查询的缘故吧,多表的情 ...

  5. Hibernate中的JPA 2.1条件删除/更新和临时表

    从JPA 2.0版开始, EntityManager提供了方法getCriteriaBuilder()来动态构建选择查询,而无需使用Java持久性查询语言(JPQL)进行字符串连接. 在2.1版中,此 ...

  6. MySQL操作之条件,排序,分页,聚合函数,分组,连接,子查询,自连接查询总结...

    -- 查询练习-- 查询所有字段-- select * from 表名;select * from students;-- 查询指定字段-- select 列1,列2,... from 表名;sele ...

  7. kibana 写两个查询条件_Kibana使用之Lucene的语法查询

    转载地址 Kibana使用的查询语法是Lucene的查询语法,这里在使用Kibana的同事一定要注意,不然,在进行搜索的时候,你会抓狂的. 下面了解下Lucene的查询语法,了解了Lucene的查询语 ...

  8. MybatisPlus查询条件和排序高级封装

    1.查询注解 import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java. ...

  9. ElasticSearch学习篇2_Rest格式操作(索引、文档)、文档的简单操作(增、删、改、查)、复杂查询操作(排序、分页、高亮)

    目录 关于索引的基本操作 声明索引.字段类型 获取索引信息举栗 删除索引举栗 拓展命令 关于文档的基本操作 插入文档 删除文档 修改文档 获取文档 根据id获取 根据条件获取 带json参数体的查询( ...

最新文章

  1. 把Doc文档转换成rtf格式
  2. POSTMAN 数据关联
  3. 文本编辑器查看 cprintf颜色_airWriter for mac(文本编辑软件)
  4. 文件上传与下载----SpringMVC
  5. TTL电平、CMOS电平、RS232通信电平的概念及区别
  6. 极客c语言课程设计,c语言课程设计之实习报告共5天完整.doc
  7. HTTPS中间人攻击实践(原理·实践)
  8. ASP.NET教程4
  9. 安防在智能家居中扮演什么角色?
  10. py3使用py3Fdfs
  11. Unable to start ServletWebServerApplicationContext due to missing ServletWeb解决办法
  12. 网络安全与网站安全及计算机安全:如何下载到Windows各版本的Nmap网络扫描神器
  13. 什么是hql,与sql的区别
  14. NLP数据预处理与词嵌入
  15. Web Confidential for mac(密码信息管理软件)
  16. 用pip给python安装matplotlib库-windows
  17. Shell中获取当前脚本路径
  18. 京东健康和药明康德入股卫宁软件,分别持有7.7%股权
  19. iDesktop、iObjects “打开数据库型数据源”出错解决方法
  20. 快速将证件照压缩到小一寸,这款工具值得收藏

热门文章

  1. vue 项目白屏解决方案
  2. 解决关于 ionic3 启动白屏 控制台错误提示:Uncaught SyntaxError Use of const in strict mode.
  3. 面试常见问题之实现bind函数
  4. 今天的考核题目: 你知道React和Vue的区别吗? skr,skr
  5. Event Loop 其实也就这点事
  6. HDU 5025Saving Tang Monk BFS + 二进制枚举状态
  7. Python 全局变量
  8. 查找标题已知的窗口句柄,遍历窗口控件句柄
  9. 算法:老鼠走迷宫问题
  10. JAVA多线程和并发基础面试问答(转载)