`
fehly
  • 浏览: 248377 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

HQL查询

阅读更多

Query接口
Query类型与org.hibernate.Criteria很接近,封装了对底层数据库表的查询请求

 

Query接口的常用方法
list()
iterate()
setMaxResults()
setFirstResult()
uniqueResult()

 

HQL查询

1.查询所有持久化对象

Transaction tx=session.beginTransaction();

Query query=session.ccreateQuery("from Testbook");

List list=query.list();

tx.commit();

 

2.投影查询

Transaction tx=session.beginTransaction();
Query query=session.ccreateQuery("select title from Testbook");
List<String> list=query.list();
tx.commit();
for(String title : list){
         System.out.println(title);
}

 

3.查询持久化对象的多个属性

Transaction tx=session.beginTransaction();
Query query=session.ccreateQuery("select new map(id,name,email) from Testbook");
List<Map> list=query.list();
tx.commit();
for(Map map : list){
         System.out.println(map.get("0")+",\t"+map.get("1")+map.get("2"));
}

 这里的 id,name,email 分别对应 0,1,2

 

 

4.HQL 中使用别名

Query query=session.ccreateQuery("select tb name as name from Testbook as tb");
List<String> list=query.list();

   可省略as,指定持久化类的别名 

Query query=session.ccreateQuery("select tb name as name from Testbook tb");
List<String> list=query.list();

 

5.别名与属性值组成key/value对

Transaction tx=session.beginTransaction();
Query query=session.ccreateQuery("select new map(tb.id,tb.name,tb.email) from Testbook");
List<Map> list=query.list();
tx.commit();
for(Map map : list){
         System.out.println(map.get("id")+",\t"+map.get("name")+map.get("email"));
}

 

6.使用distinct 查询独一无二的

Session session=HibernateSessionFactoryUtil.getSessionFactory().getCurrentSession();
Transaction tx=session.beginTransaction();
Query query=session.ccreateQuery("select distinct name from Testbook");
List<String> list=query.list();
tx.commit();
for(String name : list){
         System.out.println(name);
}

 7.HQL中的运算符

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8.where子句,限定查询的条件

Transaction tx=session.beginTransaction();
Query query=session.ccreateQuery("from Testbook where name='Narcissus'");
List<Testbook> list=query.list();
tx.commit();

 

9.使用between/not between(两者之间)

Transaction tx=session.beginTransaction();
Query query=session.ccreateQuery("from Testbook where id between 1 and 10");
List<Testbook> list=query.list();
tx.commit();

 

 10.使用in/not in(在范围内)

Transaction tx=session.beginTransaction();
Query query=session.ccreateQuery("from Testbook where name in ('Narcissus','Tom')");
List<Testbook> list=query.list();
tx.commit();

 

11.使用like/not like (模糊查询)

Transaction tx=session.beginTransaction();
Query query=session.ccreateQuery("from Testbook where name like 'Na%'");
List<Testbook> list=query.list();
tx.commit();

 

12.使用and(几个或者多个条件需要同时满足)/or(只要满足一个条件)/not(条件求反)

Transaction tx=session.beginTransaction();
Query query=session.ccreateQuery("from Testbook where name='Narcissus' and id<100");
List<Testbook> list=query.list();
tx.commit();

 

13. 使用is null (某个属性值是否为空)/is not null(某属性值不为空)

Transaction tx=session.beginTransaction();
Query query=session.ccreateQuery("from Testbook where email is null");
List<Testbook> list=query.list();
tx.commit();

 

14.一个或多个熟悉的数据排序(逗号分隔即可)

Transaction tx=session.beginTransaction();
Query query=session.ccreateQuery("from Testbook where name like 'Nar%' order by name,id desc");
List<Testbook> list=query.list();
tx.commit();

 

15.使用"?"作为参数占位符

Transaction tx=session.beginTransaction();
Query query=session.ccreateQuery("from Testbook where id<?");
query.setInteger(0,12);//起始值从0开始 对应不同的类型
List<Testbook> list=query.list();
tx.commit();

 16.使用统计函数

Transaction tx=session.beginTransaction();
Query query=session.ccreateQuery("select min(price),max(price) from Testbook");
Object[] values=(Object[])query.uniqueResult();
tx.commit();
System.out.println("最低价"+"\t"+"最高价");
System.out.println(values[0]+"\t"+values[1]);

 

17.在分组中应用统计函数

Transaction tx=session.beginTransaction();
Query query=session.ccreateQuery("select avg(price),count(*) from Testbook group by category.id");
List<Object[]> list=query.list();
tx.commit();
System.out.println("平均价"+"\t"+"总数");
for(Object[] values :list){
   System.out.println(values[0]+"\t"+values[1]);
}

18.使用having(限定条件)

Transaction tx=session.beginTransaction();
Query query=session.ccreateQuery("select avg(price),count(*) from Testbook group by price having price>50.0");
List<Object[]> list=query.list();
tx.commit();

 

19.使用函数

Transaction tx=session.beginTransaction();
Query query=session.ccreateQuery("select lower(name) from Testbook where id<100");
List<String> list=query.list();
tx.commit();

 

20.HQL 的批量更新/删除

Transaction tx=session.beginTransaction();
Query query=session.ccreateQuery("update Testbook set name='Narcissus' where id=1");
int rowCount =query.executeUpdate();
tx.commit();

 

HQL 中的连接查询

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.使用交叉连接

 

Transaction tx=session.beginTransaction();
String hql="from Product p,Category c";
Query query = session.createQuery(hql);
List list=query.list();
tx.commit();

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

使用内连接

 

 

QBC中实现内连接

 

Transaction tx=session.beginTransaction();
Criteria criteria = session.createCriteria(Product.class).createCriteria("category");
List<Product> list=query.list();
tx.commit();

 

 

使用左外连接

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

使用右外连接

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

迫切内,左,右(加fetch关键字)连接

Transaction tx=session.beginTransaction();
String hql="select c from Category c join fetch c.products";
Query query = session.createQuery(hql);
List<Category> list=query.list();
tx.commit();

 

 

分享到:
评论

相关推荐

    HQL查询及语法

    ### HQL查询及语法详解 #### 一、HQL简介 HQL,全称为Hibernate Query Language,是Hibernate框架提供的一种面向对象的查询语言。它基于SQL标准,但更加强调对象模型,支持Java中的对象关系映射(ORM),能够处理...

    HQL查询pdf资料

    ### HQL查询详解 HQL(Hibernate Query Language)是一种面向对象的查询语言,它提供了与SQL类似的功能,但更贴近于面向对象编程的思维方式。HQL允许开发人员以一种更自然的方式查询数据库,同时保持了Java对象模型...

    SSH笔记-HQL查询、QBC、本地SQL查询

    SSH笔记-HQL查询(基于位置参数查询、基于命名参数查询、分页查询、命名查询、投影查询报表查询、内/迫切内/左外/迫切左外连接查询)、QBC(QBC检索查询、统计查询、排序查询、HQL操作数据库)、本地SQL查询

    Hibernate HQL查询 分页查询 模糊查询.docx

    这里的关键点在于使用`createQuery`方法创建了一个HQL查询对象,并通过`setString`方法设置参数值,最后通过`list`方法执行查询并获取结果列表。 #### 三、分页查询 分页查询在处理大量数据时非常有用,可以有效地...

    HQL查询语言基础知识

    HQL 查询语言基础知识 HQL(Hibernate Query Language)是一种面向对象的查询语言,用于在 Hibernate 框架中查询数据库。HQL 查询语言基础知识是 Hibernate 中的基础组件之一,对于开发人员来说,掌握 HQL 查询语言...

    JPA--HQL查询(手动写原生查询sql,复杂查询必备).pdf

    JPA--HQL查询(手动写原生查询sql,复杂查询必备) JPA(Java Persistence API)是一种JavaEE标准,用于持久化数据,HQL(Hibernate Query Language)是 Hibernate 框架提供的一种查询语言,它允许开发者使用面向...

    HibernateUtil分装完整版HQL查询

    标题"HibernateUtil分装完整版HQL查询"暗示了这是一个关于使用HibernateUtil工具类来封装和执行HQL(Hibernate Query Language)查询的教程或代码示例。描述中的重复信息进一步强调了这个主题,意味着我们将探讨如何...

    HQL查询语言基础.

    **HQL查询语言基础** HQL(Hibernate Query Language)是Hibernate框架中用于操作对象关系映射(ORM)的查询语言,它与SQL类似,但专为面向对象编程设计。HQL允许开发者以类和对象的方式编写查询,而不是直接处理...

    Hibernate之HQL查询

    HQL查询的使用极大地提高了开发效率,因为它将数据操作与具体的数据库结构分离。 **1. HQL的基本语法** HQL查询语句结构通常包括以下几个部分:`SELECT`, `FROM`, `WHERE`, `GROUP BY`, `HAVING`, `ORDER BY`。...

    hibernate 查询?Hibernate的HQL查询

    【标题】:深入理解Hibernate的查询机制:HQL查询 【描述】:在ORM框架Hibernate中,数据查询和检索是一个核心功能,它提供了多种查询方式,包括标准化对象查询(Criteria Query)、Hibernate查询语言(HQL)和原生...

    HQL查询.ppt

    HQL查询 帮助文档

    Hibernate hql查询语法总结

    《Hibernate HQL查询语法详解》 Hibernate,作为Java领域中广泛应用的对象关系映射(ORM)框架,极大地简化了数据库操作。其内置的HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者以类和...

    常用易懂,易会HQL查询

    本文将深入探讨“常用易懂,易会”的HQL查询,帮助你快速上手并熟练掌握这一技能。 1. **HQL基础概念** HQL是Hibernate提供的面向对象的查询语言,与SQL类似,但更加面向对象,减少了数据库方言的差异,提高了代码...

    第三章HQL查询

    HQL查询

    HQL 查询语言基础 二

    在HQL查询语言中,`FROM`子句用于指定查询数据来源的实体或表。例如: ```hql FROM Person as p ``` 这里的`Person`表示的是一个持久化类,即ORM映射中的实体类。`as p`则定义了一个别名`p`,方便后续在查询语句中...

    Hibernate注解方式、HQL查询

    在实际项目中,结合Hibernate的注解方式和HQL查询,开发者可以高效地处理数据库操作,降低了SQL编写的工作量,提高了代码的可读性和可维护性。同时,Hibernate还提供了Criteria API和Querydsl等其他查询方式,提供了...

    Hibernate HQL查询.docx

    ### Hibernate HQL 查询详解 #### 一、HQL 概述 Hibernate 提供了一种非常强大的查询语言——HQL(Hibernate Query Language),它在语法上与 SQL 类似但功能更为强大,因为它支持面向对象的特性,例如继承、多态性...

    超级详细的hql查询语句教程

    ### HQL查询语句详解 #### 一、HQL简介 Hibernate Query Language(HQL)是一种面向对象的查询语言,其语法与SQL相似但并非完全相同。HQL的设计旨在更好地支持面向对象编程特性,比如继承、多态以及关联等概念。...

    06_传智播客hibernate教程_完善HibernateUtil类及hql查询入门

    本教程聚焦于“完善HibernateUtil类及HQL查询入门”,让我们深入探讨这两个关键概念。 首先,`HibernateUtil` 类是 Hibernate 教程中常见的一种工具类,它的主要作用是提供对 Hibernate 框架的简单封装,以方便进行...

Global site tag (gtag.js) - Google Analytics