package com.itcloud.test;

import com.itcloud.pojo.Dept;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
import org.junit.After;
import org.junit.Test;
import java.util.List; public class TestHibernate {
public static SessionFactory sessionFactory =null ;
public static Session session = null ;
public static Transaction transaction ;
static {
Configuration configuration = new Configuration().configure() ;
sessionFactory = configuration.buildSessionFactory() ;
session = sessionFactory.openSession() ;
transaction = session.beginTransaction() ;
}
@Test
public void post(){
String hql = "from Dept as d" ; //as请别名
//通过session创建quer查询
Query<Dept> query = session.createQuery(hql,Dept.class) ;
    //上面的语句也可以这样写:Query query = session.createQuery(hql) ;
     List<Dept> allDept = query.list(); System.out.print(allDept); 
}
@After public void destroy(){ transaction.commit(); session.close(); sessionFactory.close(); } }

*******************进行模糊查询

 @Test
public void post(){
String hql = "from Dept as d where d.loc like ?" ; //as请别名
//通过session创建quer查询
Query<Dept> query = session.createQuery(hql,Dept.class) ;
//设置参数
query.setParameter(0,"%"+3+"%") ; //hibernate的参数是从零开始的
List<Dept> allDept = query.list();
System.out.print(allDept); }

*************进行分页查询:

  @Test
public void post(){
String column="loc" ; //表示模糊查询列 ;
String keyword="" ;//空字符串表示查询全部
int currentPage = 1 ;//当前页码,第一页
int lineSize =2 ;//每页显示两条数据 ;
String hql = "From Dept as d where d."+column+" like ?" ; //注意点,Dept必须对应着实体类
//通过session创建quer查询
Query<Dept> query = session.createQuery(hql,Dept.class) ;
//设置参数
query.setParameter(0,"%"+keyword+"%") ; //hibernate的参数是从零开始的 /**
在查询之前进行分页操作
查询行数还是从0开始
* 第1页从0行开始,第二页从(2-1)*2=2行开始,...
* 动态的根据页码的变化,跟新查询的数据
*/
query.setFirstResult((currentPage-1)*lineSize) ;//设置开始行
query.setMaxResults(lineSize) ; //每页查询lineSize行数据
//上面的语句就表示,从第一行开始查询,每次查询2行
List<Dept> allDept = query.list();
System.out.print(allDept); }

查询结果

Hibernate:
select
dept0_.deptno as deptno1_0_,
dept0_.dname as dname2_0_,
dept0_.loc as loc3_0_
from
Dept dept0_
where
dept0_.loc like ? limit ?

********统计查询:

    @Test
public void post(){
String hql = "select count(deptno) From Dept as d" ; //注意点,Dept必须对应着实体类
Query query = session.createQuery(hql) ;
System.out.println(query.uniqueResult());
}

注意点:

query.uniqueResult()返回是的数据类型是Long,可以通过以下的方法转换成整型
Long num = (Long)query.uniqueResult() ;
System.out.println(num.intValue());
 
******在*.hbm.xml文件中配置Query查询

取得查询语句:

       Query query = session.getNamedQuery("findById") ;
query.setParameter(0,4);//设置参数可以不考虑数据类型
News vo =(News)query.uniqueResult() ; //查询出单个数据
System.out.println(vo);
HibernateSessionFactory.closeSession();

*********query进行数据的更新操作

    @Test
public void post(){
String hql = "update Dept set dname=? where deptno=?" ;
Query query = session.createQuery(hql) ;
//设置参数
query.setParameter(0,"更新部门操作") ;
query.setParameter(1,1) ;
int x = query.executeUpdate() ; //执行更新语句返回的是影响的行数 ;
System.out.print(x);
}

*********删除数据操作

   String hql = "delete from News where nid=?" ;
Query query = session.createQuery(hql);
query.setParameter(0, 6);
int len = query.executeUpdate() ;//进行数据的更新返回的是影响的行数
HibernateSessionFactory.getSession().beginTransaction().commit();//更新操作必须要进行数据的提交
 System.out.println(len);

*********使用iterator取得查询结果

 @Test
public void post(){
String hql = "from Dept as d" ; //as请别名
//通过session创建quer查询
Query<Dept> query = session.createQuery(hql,Dept.class) ;
//上面的语句也可以这样写:Query query = session.createQuery(hql) ;
Iterator<Dept> iter = query.iterate();
while(iter.hasNext()){
System.out.println(iter.next());
}
}

结果:

Hibernate:
select
dept0_.deptno as col_0_0_
from
Dept dept0_
Hibernate:
select
dept0_.deptno as deptno1_0_0_,
dept0_.dname as dname2_0_0_,
dept0_.loc as loc3_0_0_
from
Dept dept0_
where
dept0_.deptno=?
Dept{deptno=1, dname='更新部门操作', loc='403'}
Hibernate:
select
dept0_.deptno as deptno1_0_0_,
dept0_.dname as dname2_0_0_,
dept0_.loc as loc3_0_0_
from
Dept dept0_
where
dept0_.deptno=?
Dept{deptno=2, dname='运营部门', loc='411'}
Hibernate:
select
dept0_.deptno as deptno1_0_0_,
dept0_.dname as dname2_0_0_,
dept0_.loc as loc3_0_0_
from
Dept dept0_
where
dept0_.deptno=?
Dept{deptno=3, dname='设计部门', loc='401'}

  这种方式我是不会用的

Hibernate 学习之Query查询(HQL查询)的更多相关文章

  1. 【hql】spring data jpa中 @Query使用hql查询 问题

    spring data jpa中 @Query使用hql查询 问题 使用hql查询, 1.from后面跟的是实体类 不是数据表名 2.字段应该用实体类中的字段 而不是数据表中的属性 实体如下 hql使 ...

  2. HQL查询——HQL查询的基本用法

    HQL查询--HQL查询的基本用法 1.HQL语法类似于SQL语法,但是需要注意的是,HQL是一种完全面向对象的查询语言.SQL语言操作的对象是数据表.列等数据库对象,而HQL语言的操作对象是类.实例 ...

  3. hibernate框架学习笔记7:HQL查询、Criteria查询简介

    HQL查询:hibernate独有的查询语言 适用于不复杂的多表查询 示例: 实体类: package domain; public class Customer { private Long cus ...

  4. Hibernate(十三):HQL查询(二)

    背景 基于上一章节<Hibernate(十二):HQL查询(一)>,已经学习了一部分关于HQL的用法: HQL带参数查询 HQL Order By排序查询 HQL 设置实体参数查询 本章节 ...

  5. Hibernate的查询 HQL查询 查询某几列

    HQL 是Hibernate Query Language的简写,即 hibernate 查询语言:HQL采用面向对象的查询方式.HQL查询提供了更加丰富的和灵活的查询特性,因此Hibernate将H ...

  6. hibernate框架学习笔记10:HQL查询详解

    HQL语句中不可以出现与表有关的内容,而是对象的属性 实体类(注意配置文件): package domain; import java.util.HashSet; import java.util.S ...

  7. Hibernate学习第4天--HQL——QBC查询详解,抓取策略优化。

    上次课回顾: l  Hibernate的一对多 n  表与表之间关系 u  一对多关系 u  多对多关系 u  一对一关系 n  Hibernate的一对多配置 u  搭建Hibernate基本环境 ...

  8. hibernate学习系列-----(4)hibernate基本查询上篇:HQL基本查询

    紧接着上一篇,今天继续hibernate的学习总结,来聊一聊hibernate的基本查询方法,先说说HQL(hibernate Query Language):它是官方推荐的查询语言.在开始写代码之前 ...

  9. Hibernate(十四):HQL查询(三)

    背景 基于上两章节<Hibernate(十二):HQL查询(一)>.<Hibernate(十三):HQL查询(二)>,已经学习了一部分关于HQL的用法: HQL带参数查询 HQ ...

随机推荐

  1. 通过jersey-client客户端调用Jersey的Web服务模拟CURD

    一.总体说明 通过jersey-client接口,创建客户端程序,来调用Jersey实现的RESTful服务,实现增.删.改.查等操作. 服务端主要是通过内存的方式,来模拟用户的增加.删除.修改.查询 ...

  2. echarts图表变形解决方案

    在同一页面的多个echarts图在查询或切换图片时可能会变形,如图 解决方案是添加以下几行代码 /*在查询或切换统计图时图片有可能会变形,于是每次调getEchartsData()都给每个chart的 ...

  3. SpringMVC参数校验

    使用SpringMVC时配合hibernate-validate进行参数的合法性校验,能节省一定的代码量. 使用步骤 1.搭建Web工程并引入hibernate-validate依赖 <depe ...

  4. 说一说Java的Unsafe类

    最近在看Java并发包的源码,发现了神奇的Unsafe类,仔细研究了一下,在这里跟大家分享一下. Unsafe类是在sun.misc包下,不属于Java标准.但是很多Java的基础类库,包括一些被广泛 ...

  5. 张金禹 C语言--第0次作业

    1:在填报专业的时候,我也犹豫了很久,但最后还是选择了计算机专业.因为在上大学之前我就对编程.设计等有浓厚的兴趣,但繁重的高中学习任务使我没有过多的去关注,所以我选择了计算机专业去培养我在这方面的兴趣 ...

  6. Django 视图层

    URL映射 1.分布式url映射 include()函数提供分布式url映射功能,使URL映射可以被编写在多个url.py文件中 from django.conf.urls import url fr ...

  7. 201421123042 《Java程序设计》第5周学习总结

    1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 接口 Comparable Arrays.sort -has a Lambda表达式 1.2尝试使用思维导图将这些关键词组织起来 ...

  8. Java并发编程实战 之 线程安全性

    1.什么是线程安全性 当多个线程访问某个类时,不管运行时环境采用何种调用方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全 ...

  9. day-4 python多进程编程知识点汇总

    1. python多进程简介 由于Python设计的限制(我说的是咱们常用的CPython).最多只能用满1个CPU核心.Python提供了非常好用的多进程包multiprocessing,他提供了一 ...

  10. 【learning】多项式相关(求逆、开根、除法、取模)

    (首先要%miskcoo,这位dalao写的博客(这里)实在是太强啦qwq大部分多项式相关的知识都是从这位dalao博客里面学的,下面这篇东西是自己对其博客学习后的一些总结和想法,大部分是按照其博客里 ...