Hibernate 学习之Query查询(HQL查询)
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,可以通过以下的方法转换成整型

取得查询语句:
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查询)的更多相关文章
- 【hql】spring data jpa中 @Query使用hql查询 问题
spring data jpa中 @Query使用hql查询 问题 使用hql查询, 1.from后面跟的是实体类 不是数据表名 2.字段应该用实体类中的字段 而不是数据表中的属性 实体如下 hql使 ...
- HQL查询——HQL查询的基本用法
HQL查询--HQL查询的基本用法 1.HQL语法类似于SQL语法,但是需要注意的是,HQL是一种完全面向对象的查询语言.SQL语言操作的对象是数据表.列等数据库对象,而HQL语言的操作对象是类.实例 ...
- hibernate框架学习笔记7:HQL查询、Criteria查询简介
HQL查询:hibernate独有的查询语言 适用于不复杂的多表查询 示例: 实体类: package domain; public class Customer { private Long cus ...
- Hibernate(十三):HQL查询(二)
背景 基于上一章节<Hibernate(十二):HQL查询(一)>,已经学习了一部分关于HQL的用法: HQL带参数查询 HQL Order By排序查询 HQL 设置实体参数查询 本章节 ...
- Hibernate的查询 HQL查询 查询某几列
HQL 是Hibernate Query Language的简写,即 hibernate 查询语言:HQL采用面向对象的查询方式.HQL查询提供了更加丰富的和灵活的查询特性,因此Hibernate将H ...
- hibernate框架学习笔记10:HQL查询详解
HQL语句中不可以出现与表有关的内容,而是对象的属性 实体类(注意配置文件): package domain; import java.util.HashSet; import java.util.S ...
- Hibernate学习第4天--HQL——QBC查询详解,抓取策略优化。
上次课回顾: l Hibernate的一对多 n 表与表之间关系 u 一对多关系 u 多对多关系 u 一对一关系 n Hibernate的一对多配置 u 搭建Hibernate基本环境 ...
- hibernate学习系列-----(4)hibernate基本查询上篇:HQL基本查询
紧接着上一篇,今天继续hibernate的学习总结,来聊一聊hibernate的基本查询方法,先说说HQL(hibernate Query Language):它是官方推荐的查询语言.在开始写代码之前 ...
- Hibernate(十四):HQL查询(三)
背景 基于上两章节<Hibernate(十二):HQL查询(一)>.<Hibernate(十三):HQL查询(二)>,已经学习了一部分关于HQL的用法: HQL带参数查询 HQ ...
随机推荐
- centos7 nginx安装/启动/进程状态/杀掉进程
1.安装 下载RPM:wget http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.10.0-1.el7.ngx.x86_64.rpm ...
- 跟着大神学zookeeper分布式锁实现-----来自Ruthless
前几天分享了@Ruthless大神的Redis锁,发现和大家都学习了很多东西.因为分布式锁里面,最好的实现是zookeeper的分布式锁.所以在这里把实现方式和大家分享一下. zookeeper分布式 ...
- C#图解 (类和继承)
所有的类都派生自object类 除了特殊的类object ,所有的类都是派生类,即使它们没有基类的规格说明.类object是唯一的非派生类,因为它是继承层次结构的基础. 一个类声明的基类规格说明只能有 ...
- 关于SELECT LAST_INSERT_ID()的使用规则
尊重个人劳动成果,转载请注明出处: http://blog.csdn.net/czd3355/article/details/71302441 首先我先解释以下在在映射文件中的代码是什么意思. < ...
- 云计算--网络原理与应用--20171122--STP与HSRP
简单了解STP 学习HSRP 实验 一. 简单学习STP STP(spanning tree protocol)生成树协议,就是把一个环形的结构改变成一个树形的结构.通过一些算法,在逻辑上阻塞一些端 ...
- 【Java】0X001.配置开发环境,JDK、classpath等
[Java]0x01 配置开发环境,JDK.CLASSPATH等 一. 下载JDK安装文件 首先,进入Oracle官网Java页面. 注意,要下载的是JDK而不是JRE,这点很重要,因为JRE并不包含 ...
- C语言第三次博客作业—循环结构
一.PTA实验作业 题目1 1.实验代码 int N,i; //N为用户数 char sex; //sex表示性别 double High; //Hight表示身高 scanf("%d&qu ...
- Beta冲刺第三天
一.昨天的困难 没有困难. 二.今天进度 1.林洋洋:修改权限相关的资源表示,修复flex布局排版高度问题,修复文件更新问题,去除登录页面的默认账号密码,服务器部署. 2.黄腾达:修复日程首次执行时间 ...
- edittext实现自动查询,刷新listview
mEdittextqueryvalue.addTextChangedListener(new TextWatcher() { @Override pub ...
- 关于jvm的OutOfMemory:PermGen space异常的解决
在做网校的时候,经常会在控制台会报出方法区的内存溢出,在网上找的方法,无非都是在tomcat的bin/catalina.bat文件中 设置jvm的堆的大小和方法区的大小,但是通过eclipse启动to ...