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 ...
随机推荐
- 通过jersey-client客户端调用Jersey的Web服务模拟CURD
一.总体说明 通过jersey-client接口,创建客户端程序,来调用Jersey实现的RESTful服务,实现增.删.改.查等操作. 服务端主要是通过内存的方式,来模拟用户的增加.删除.修改.查询 ...
- echarts图表变形解决方案
在同一页面的多个echarts图在查询或切换图片时可能会变形,如图 解决方案是添加以下几行代码 /*在查询或切换统计图时图片有可能会变形,于是每次调getEchartsData()都给每个chart的 ...
- SpringMVC参数校验
使用SpringMVC时配合hibernate-validate进行参数的合法性校验,能节省一定的代码量. 使用步骤 1.搭建Web工程并引入hibernate-validate依赖 <depe ...
- 说一说Java的Unsafe类
最近在看Java并发包的源码,发现了神奇的Unsafe类,仔细研究了一下,在这里跟大家分享一下. Unsafe类是在sun.misc包下,不属于Java标准.但是很多Java的基础类库,包括一些被广泛 ...
- 张金禹 C语言--第0次作业
1:在填报专业的时候,我也犹豫了很久,但最后还是选择了计算机专业.因为在上大学之前我就对编程.设计等有浓厚的兴趣,但繁重的高中学习任务使我没有过多的去关注,所以我选择了计算机专业去培养我在这方面的兴趣 ...
- Django 视图层
URL映射 1.分布式url映射 include()函数提供分布式url映射功能,使URL映射可以被编写在多个url.py文件中 from django.conf.urls import url fr ...
- 201421123042 《Java程序设计》第5周学习总结
1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 接口 Comparable Arrays.sort -has a Lambda表达式 1.2尝试使用思维导图将这些关键词组织起来 ...
- Java并发编程实战 之 线程安全性
1.什么是线程安全性 当多个线程访问某个类时,不管运行时环境采用何种调用方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全 ...
- day-4 python多进程编程知识点汇总
1. python多进程简介 由于Python设计的限制(我说的是咱们常用的CPython).最多只能用满1个CPU核心.Python提供了非常好用的多进程包multiprocessing,他提供了一 ...
- 【learning】多项式相关(求逆、开根、除法、取模)
(首先要%miskcoo,这位dalao写的博客(这里)实在是太强啦qwq大部分多项式相关的知识都是从这位dalao博客里面学的,下面这篇东西是自己对其博客学习后的一些总结和想法,大部分是按照其博客里 ...