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. 为什么说android UI操作不是线程安全的

    转载于:http://blog.csdn.net/lvxiangan/article/details/17218409#t2 UI线程及Android的单线程模型原则 使用Worker线程 Commu ...

  2. JAVA关于一些变量的技巧

    如果一个变量的值不变,而且他还要被多次用到 另建一个类,把变量定义到里面   注意  private static      public class JexlConfig {     private ...

  3. hackme.inndy.tw - pyyy - Writeup

    hackme.inndy.tw - pyyy - Writeup 0x01 反编译 1.第一次尝试的时候我直接在线反编译,部分结果如下. for (i, f) in enumerate(F): n = ...

  4. 2017年秋软工-领跑衫获奖感言&我最感谢的人

    啥都不说,先上幅图.获得领跑衫,开心. 一.回忆 这是我第二次来上恩师杨的软件工程,第一次是2016年春,那时候我还是本科三年级的学生.忘了第一次为啥去蹭课,印象中是我的榜样亮哥把我给忽悠过去的?我也 ...

  5. 事后诸葛亮分析——Beta版本

    事后诸葛亮分析 请两个小组在Deadline之前,召开事后诸葛亮会议,发布一篇事后分析报告. 软件工程课的目的,主要是让大家通过做项目,学到软件工程的知识,而不是低水平重复. 软件=程序+软件工程,软 ...

  6. Software Engineering-HW1

    title: Software Engineering-HW1 date: 2017-09-13 15:41:13 tags: HW --- 阅读随笔 在<徐宥:掉进读书的兔子洞>里面, ...

  7. Oracle查询用户权限

    Oracle查询用户权限 -- 确定角色的权限select * from role_tab_privs ;              包含了授予角色的对象权限select * from role_ro ...

  8. ios swift例子源码网址总结

    http://blog.csdn.net/woaifen3344/article/details/40079351 http://www.ruanman.net/swift/learn/4607.ht ...

  9. bzoj 4399 魔法少女LJJ

    4399: 魔法少女LJJ Time Limit: 20 Sec  Memory Limit: 162 MBhttp://www.lydsy.com/JudgeOnline/problem.php?i ...

  10. 使用HttpClient4.5实现HTTPS的双向认证

    说明:本文主要是在平时接口对接开发中遇到的为保证传输安全的情况特要求使用https进行交互的情况下,使用httpClient4.5版本对HTTPS的双向验证的  功能的实现    首先,老生常谈,文章 ...