1、HQL查询定义

Hibernate查询分类:
1. get/load 根据OID检索
2. 对象视图检索 c.getOrders
3. Sql语句 createSqlQuery
4. Hql语句 createQuery
5. Criteria查询 createCriteria
HQL 详解
QBC 详解

2、Hql查询所有

@Test
public void test01() {
Session session = HibernateUtil.openSession();
Transaction tran = session.beginTransaction(); List<Customer> list = session.createQuery("from Customer").list(); System.out.println(list); tran.commit();
session.close();
}

  

3、 Hql选择查询所有

@Test
public void test02() {
Session session = HibernateUtil.openSession();
Transaction tran = session.beginTransaction(); Query query = session
.createQuery("select c.id, c.name from Customer c"); List<Object[]> list = query.list();
for (Object[] obj : list) {
System.out.println(Arrays.toString(obj));
} System.out.println(list); tran.commit();
session.close();
}

4、投影查询

// 投影查询
// 选择查询的基础上,想把查询结果封装到对象中
@Test
public void test03() {
Session session = HibernateUtil.openSession();
Transaction tran = session.beginTransaction(); Query query = session
.createQuery("select new Customer(c.id,c.name) from Customer c"); List<Customer> list = query.list(); System.out.println(list); tran.commit();
session.close();
}

5、排序查询

// 排序
@Test
public void test04() {
Session session = HibernateUtil.openSession();
Transaction tran = session.beginTransaction(); Query query = session.createQuery("from Customer c order by c.id desc");
List<Customer> list = query.list(); System.out.println(list); tran.commit();
session.close();
}

6、分页查询

@Test
public void test05() {
Session session = HibernateUtil.openSession();
Transaction tran = session.beginTransaction(); Query query = session.createQuery("from Customer c order by c.id desc"); // limit ?,? setFirstResult,setMaxResults
// setFirstResult: (当前页数-1)*每页最大记录数 // 从哪个索引开始取数据.包裹索引本身的记录
query.setFirstResult(0);
// 查询出多少条数据
query.setMaxResults(3); List<Customer> list = query.list(); System.out.println(list);
tran.commit();
session.close();
}

7、聚合函数查询

// 聚合函数
@Test
public void test07c() {
Session session = HibernateUtil.openSession();
Transaction tran = session.beginTransaction(); // ------------------------------------------------
// Query query =
// session.createQuery(" select count(*) from Customer c ");
// Query query =
// session.createQuery(" select avg(c.id) from Customer c ");
// Query query =
// session.createQuery(" select sum(c.id) from Customer c ");
// Query query =
// session.createQuery(" select max(c.id) from Customer c ");
Query query = session.createQuery("select count(*) from Customer c");
Object count = query.uniqueResult(); System.out.println(count);
tran.commit();
session.close();
}

  8、绑定查询

// 绑定参数
@Test
public void test06() {
Session session = HibernateUtil.openSession();
Transaction tran = session.beginTransaction(); // 参数1:?占位符的索引 ,第一个问好索引为0
Query query = session.createQuery("from Customer c where c.id= ?"); // 参数1:?占位符的索引 ,第一个问好索引为0
query.setInteger(0, 6);
Customer cust = (Customer) query.uniqueResult();
System.out.println(cust);
tran.commit();
session.close();
}

  9、分组查询

// 分组
// group by .. having..
@Test
public void test08() {
Session session = HibernateUtil.openSession();
Transaction tran = session.beginTransaction(); Query query =session.createQuery(" select o.customer, count(o) " +
" from Order o " +
" group by o.customer " +
" having count(o) > 2 ");
List<Object[]> list = query.list(); for (Object[] objs : list) {
System.out.println(Arrays.toString(objs));
} tran.commit();
session.close();
}

10、 连接查询

1.交叉连接 ,等效 sql 笛卡尔积(不常用)

2.隐式内连接,等效 sql 隐式内连接

3.内连接,等效sql内连接

4.迫切内连接,hibernate底层使用 内连接。

5.左外连接,等效sql左外连接

6.迫切左外连接,hibernate底层使用 左外连接

7.右外连接,等效sql右外连接

package com.alice.hibernate02.hql;

import java.util.Arrays;
import java.util.List; import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test; import com.alice.hibernate02.util.HibernateUtil; //HQL详解2-表连接
public class Demo02 {
//交叉连接 => 笛卡尔积
//开发时要避免出现笛卡尔积
@Test
public void test01(){
Session session = HibernateUtil.openSession();
Transaction tran = session.beginTransaction(); Query query = session.createQuery("from Customer c,Order o"); List<Object[]> list = query.list();
for(Object[] obj:list){
System.out.println(Arrays.toString(obj));
} tran.commit();
session.close();
}
//内连接
//隐式内连接 => 在笛卡尔积基础上过滤无效数据
@Test
public void test02(){
Session session = HibernateUtil.openSession();
Transaction tran = session.beginTransaction(); Query query = session.createQuery("from Customer c,Order o where o.customer = c"); List<Object[]> list = query.list();
for(Object[] obj:list){
System.out.println(Arrays.toString(obj));
} tran.commit();
session.close();
} //内连接
//显式内连接( 非迫切)=> inner join
// List<Object[]>
// Object[] => [Customer,Order]
// 将父 与 子 对象装入数组中分别 返回
@Test
public void test03(){
Session session = HibernateUtil.openSession();
Transaction tran = session.beginTransaction(); Query query = session.createQuery("from Customer c inner join c.orders"); List<Object[]> list = query.list();
for(Object[] obj:list){
System.out.println(Arrays.toString(obj));
} tran.commit();
session.close();
}
//内连接
//显式内连接(迫切)=> inner join
// List<Customer>
// 迫切连接会将 子装入父中,组装成一个对象
@Test
public void test04(){
Session session = HibernateUtil.openSession();
Transaction tran = session.beginTransaction(); Query query = session.createQuery("from Customer c inner join fetch c.orders"); List<Object> list = query.list();
for(Object obj:list){
System.out.println(obj);
} tran.commit();
session.close();
} //左外连接
//left [outer] join
//右外连接
//right [outer] join
@Test
public void test05(){
Session session = HibernateUtil.openSession();
Transaction tran = session.beginTransaction(); Query query = session.createQuery("from Customer c left outer join c.orders"); List<Object[]> list = query.list();
for(Object[] obj:list){
System.out.println(Arrays.toString(obj));
} tran.commit();
session.close();
} //左外连接 迫切
//left [outer] join fetch
@Test
public void test06(){
Session session = HibernateUtil.openSession();
Transaction tran = session.beginTransaction(); Query query = session.createQuery("from Customer c left outer join fetch c.orders"); List<Object> list = query.list();
for(Object obj:list){
System.out.println(obj);
} tran.commit();
session.close();
}
}

  

hibernate学习(7)——HQL查询的更多相关文章

  1. Hibernate学习之hql查询语句

    *  页面上数据的字段和数据库中字段差不多,这个时候,采用迫切连接  结构比较好,如果页面上的字段很少,要按照需求加载数据,采用带构造函数的select查询 实例讲解:转自:http://www.cn ...

  2. Hibernate中关于HQL查询返回List<Object>数据的结果集问题

    ---恢复内容开始--- 开发中遇到的一个小问题,使用Hibernate中的HQL查询时,使用query.list()查询出来的是一个List<Object>结果集 原来代码: publi ...

  3. Hibernate学习笔记--------4.查询

    一.Get/Load Get方法是立即检索,而load是延迟检索,他们都是根据主键进行查询.在<class>标签中,若把lazy属性改为false,load方法就会立即检索,class中的 ...

  4. Hibernate学习---单表查询

    我们都知道SQL是非常强大的,为什么这么说呢?相信学过数据库原理的同学们都深有体会,SQL语句变化无穷,好毫不夸张的说可以实现任意符合我们需要的数据库操作,既然前面讲到Hibernate非常强大,所以 ...

  5. 【Hibernate步步为营】--hql查询小介

    HQL 是指Hibernate Query Language,它是Hibernate的查询语言,拥有一套自己的查询机制,它的查询语句和SQL非常类似.在使用的时候可以非常快上手.HQL提供了基本上SQ ...

  6. Hibernate框架之HQL查询与Criteria 查询的区别

    Hibernate框架提供了HQL查询和Criteria 查询.下面对这两种查询分别做个例子.也好对这两种查询方法有个大概的了解.就用房屋信息表做例子,查询所有房屋信息. HQL语句查询所有房屋信息: ...

  7. Hibernate用到HQL查询时的错误

    Exception in thread "main" org.hibernate.hql.internal.ast.QuerySyntaxException: student is ...

  8. Hibernate学习之hql 与sql

    Hibernate中查询: createQuery( String qlString)使用的是HQL语句: createNativeQuery (String sqlString)使用的是SQL语句: ...

  9. Hibernate 学习之Query查询(HQL查询)

    package com.itcloud.test; import com.itcloud.pojo.Dept; import org.hibernate.Session; import org.hib ...

随机推荐

  1. ecshop二次开发常用文件位置

    语言包修改: /language/zh_cn/admin/common.php 商品详情页模板: /themes/**/goods.dwt  (最下方有changePrice() 点选属性或改变数量时 ...

  2. 从jquery里的$.ajax()到angularjs的$http

    jquery中对ajax的使用做了很多封装,使得我们使用习惯了,反而并不大清楚在请求过程中的一些细节. 在第一次使用angularjs的$http时,后台一直接受不到前端请求的数据,于是小小研究了一下 ...

  3. manven搭建和ssm的整合(转)

    原文:http://www.cnblogs.com/youzhibing/p/5004619.html 这是个很好的帖子,但是原文的maven搭建上有点问题. 帖子后面有说,其实不用配环境变量也是可以 ...

  4. hdu 1503 Advanced Fruits

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1503 思路:这是一道最长公共子序列的题目,当然还需要记录路径.把两个字符串的最长公共字串记录下来,在递 ...

  5. Python爬虫Scrapy框架入门(2)

    本文是跟着大神博客,尝试从网站上爬一堆东西,一堆你懂得的东西 附上原创链接: http://www.cnblogs.com/qiyeboy/p/5428240.html 基本思路是,查看网页元素,填写 ...

  6. sqlserver表分区小结

    为什么要表分区?  当一个表的数据量太大的时候,我们最想做的一件事是什么?将这个表一分为二或者更多分,但是表还是这个表,只是将其内容存储分开,这样读取就快了N倍了 原理:表数据是无法放在文件中的,但是 ...

  7. 与你相遇好幸运,Postgresql和postgis安装

    笔者开发环境: windows 7 x86_64 一开始安装的是官网最新版 PostgreSQL 9.6 ,安装成功 之后安装PostGIS Bundle 2.2 for PostgreSQL x64 ...

  8. Linux常用命令学习3---(文件的压缩和解压缩命令zip unzip tar、关机和重启命令shutdown reboot……)

    1.压缩和解压缩命令    常用压缩格式:.zip..gz..bz2..tar.gz..tar.bz2..rar .zip格式压缩和解压缩命令        zip 压缩文件名 源文件:压缩文件   ...

  9. Power BI for Office 365(五)Power View第二部分

    继续上一篇Power View 报表的创建, Anna觉得为每一个大类创建一张单独的报表似乎很不现实,所以她决定按照另外一种方式来设计报表,从而满足最终用户想要查看不同大类下的数据的要求. 于是Ann ...

  10. Mybatis关联查询(嵌套查询)

    上一篇文章介绍了基于Mybatis对数据库的增.删.改.查.这一篇介绍下关联查询(join query). 三张表:user article blog 表的存储sql文件: /* Navicat My ...