HQL入门学习

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

package myHibernate;
/** 测试简单的HQL语句* 2010年4月9日 23:36:54* */
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import junit.framework.TestCase;
public class HQLTest extends TestCase {public void intiData() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();Classes classes = new Classes();classes.setName("713");session.save(classes);Student student1 = new Student();Student student2 = new Student();student1.setCreateTime(new Date());student2.setCreateTime(new Date());student1.setName("小妹");student2.setName("小桂");student1.setClasses(classes);student2.setClasses(classes);session.save(student1);session.save(student2);tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}}public void testHQL_1() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();//小%要加单引号哦//注意返回的结果,此处查询的是属性而不是对象,故返回的是与该属性同类型的属性列表List studentName = session.createQuery("select name from Student where name like '小%'").list();Iterator iter = studentName.iterator();while(iter.hasNext()){String name = (String) iter.next();System.out.println(name);}tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}}
//查询多个属性public void testHQL_2() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();//如果查询多个属性则返回的是由Object数组组成的list——每个数组代表一组属性。//数组的长度取决于select语句中属性的个数List studentName = session.createQuery("select id,name from Student").list();Iterator iter = studentName.iterator();while(iter.hasNext()){   Object objects[]= (Object[]) iter.next();  System.out.print("id: "+objects[0]+" ");
/*    int id =(Integer)objects[0];System.out.println("id+10:"+(id+10));*/System.out.println("name: "+objects[1]);  }  tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}}
//查询多个属性,并且返回的是一个具体的类型(如过觉得Object不够对象化的话),而不是Object
//注意必须写构造方法,包括无参的(原则上要求)public void testHQL_3() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();//此时list中为Student对象List studentName = session.createQuery("select new Student(id,name) from Student").list();Iterator iter = studentName.iterator();while(iter.hasNext()){Student student = (Student) iter.next();System.out.println(student.getId()+" "+student.getName());  }  tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}}
//使用别名进行查询,可以使用as关键子也可以不用public void testHQL_4() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();//  List studentName = session.createQuery("select s.id,s.name from Student s").list();//使用了as关键字List studentName = session.createQuery("select s.id,s.name from Student as s").list();Iterator iter = studentName.iterator();while(iter.hasNext()){   Object objects[]= (Object[]) iter.next();  System.out.print("id: "+objects[0]+" ");System.out.println("name: "+objects[1]);  } tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}}
/**查询实体对象*可以采用别名也可以不用* */ public void testHQL_5() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();// List studentName = session.createQuery("from Student").list();// List studentName = session.createQuery("from Student s").list();List studentName = session.createQuery("from Student as s").list();Iterator iter = studentName.iterator();while(iter.hasNext()){   Student s =(Student)iter.next();System.out.println(s.getName());} tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}}
/** 采用select查询实体的话一定要用别名* */public void testHQL_6() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();// List studentName = session.createQuery("from Student").list();// List studentName = session.createQuery("from Student s").list();List studentName = session.createQuery("select s from Student as s").list();Iterator iter = studentName.iterator();while(iter.hasNext()){   Student s =(Student)iter.next();System.out.println(s.getName());} tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}}
/** 采用迭代接口(Iterator)进行查询* 会有"N+1"问题出现:* N:发出N条语句到数据库进行查询(每个记录一条语句)* 1:发出查询id列表的语句* 原因:迭代接口使用缓存(session),通过查询出来的id到缓存中去找,找不到就会到数据库中去找* */ public void testHQL_7() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();// List studentName = session.createQuery("from Student").list();Iterator iter = session.createQuery("select s from Student as s").iterate();while(iter.hasNext()){   Student s =(Student)iter.next();System.out.println(s.getName());} tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}}
/** 先执行用list接口进行的查询再执行iterator接口的查询* */public void testHQL_8() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();// List studentName = session.createQuery("from Student").list();List students = session.createQuery("from Student").list();Iterator iter1 = students.iterator();while(iter1.hasNext()){Student student = (Student) iter1.next();System.out.println(student.getId()+" "+student.getName());  } //由于上面先用list进行了一次查询,故缓存中存在了这些对象,下面用iterate进行//查询时到缓存中进行查找,找得到这些对象,故只发出了一条语句:查询id的语句//总结:在有缓存的前提下使用iterate会提高效率Iterator iter = session.createQuery("select s from Student as s").iterate();while(iter.hasNext()){   Student s =(Student)iter.next();System.out.println(s.getName());} tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}}
/** 简单条件查询* 可以采用?方式进行查询,代表一个参数* 参数的索引从0开始* */public void testHQL_9() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();  
/*   Query query =  session.createQuery("select name from Student where name like ?");query.setParameter(0, "%王");Iterator iter = query.list().iterator();*///采用方法链的方式:Iterator iter = session.createQuery("select name from Student where name like ?").setParameter(0, "小%").list().iterator();while(iter.hasNext()){System.out.println(iter.next());  }  tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}}
/** 采用:参数名称的方式* */ public void testHQL_10() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();  
/*   Query query =  session.createQuery("select name from Student where name like ?");query.setParameter(0, "%王");Iterator iter = query.list().iterator();*///采用方法链的方式:Iterator iter = session.createQuery("select name from Student where name like :name").setParameter("name", "小%").list().iterator();while(iter.hasNext()){System.out.println(iter.next());  }  tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}}/** 采用:参数名称的方式2:in方法* */ public void testHQL_11() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();  Query query =  session.createQuery("select name from Student where id in(:myids)");Object ids[] = new Object[]{1,2,3};query.setParameterList("myids",ids);Iterator iter = query.list().iterator();while(iter.hasNext()){System.out.println(iter.next());  }  tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}}
/** 附加日期条件1* */public void testHQL_12() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();Query query =  session.createQuery("select name from Student where date_format(createTime,'%Y-%m-%d')=?");query.setParameter(0,"2010-04-10");Iterator iter = query.list().iterator();while(iter.hasNext()){System.out.println(iter.next());  }  tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}}
/*
* 附加日期条件2
* 【注意】写的MM,而不是小写的mm  m是小时中的分钟数     M是年中的月份
* 【重要】掌握定义日期的方法
* */ public void testHQL_13() {Session session = null;Transaction tx = null;SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try {session = HibernateUtils.getSession();tx = session.beginTransaction();Query query =  session.createQuery("select name from Student where createTime between ? and ?");//要求参数必须是一个日期Date beginTime=new Date(),endTime=new Date();try {beginTime = sdf.parse("2010-02-10 00:00:00");endTime = sdf.parse("2010-04-10 23:59:59");} catch (ParseException e) {e.printStackTrace();}query.setParameter(0,beginTime);query.setParameter(1,endTime);Iterator iter = query.list().iterator();while(iter.hasNext()){System.out.println(iter.next());  }  tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}}
/** 使用SQL语句* */public void testHQL_14() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();Query query =  session.createSQLQuery("select * from student");Iterator iter = query.list().iterator();while(iter.hasNext()){Object obj[] = (Object[]) iter.next();System.out.println(obj[0]+" "+obj[1]);}  tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}}
}
 

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://my.oschina.net/u/2317688/blog/508883

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287543.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle精简客户端配置

2019独角兽企业重金招聘Python工程师标准>>> 由于Oracle client体积很大。而且安装后,基本上就用2个功能:TNS配置服务名和SQL*Plus。下面是一种小巧、快捷的Oracle客户端配置方法: 1.下载Instant Client 下载地址: htt…

WinUI迁移到.NET MAUI个人体验

迁移的初衷本人平时是做.net相关的工作,对于.net技术栈也有一些了解,自从新的.net能够跨平台之后,之前也有跨平台的ui框架Xamarin,现在微软推出了.NET MAUI这个说是 统一了开发体验,而且都RC版本了,所以本人…

祝CSDN2021牛气冲天祝我也拨云散雾

前言 2020年4月,我写了一篇用turtle绘制《小清新风格的树》,反响挺好。现在打算使用turtle修改一下绘制方式,因为线条的绘制太过考虑因素过多,如果使用方块进行堆叠,绘制出来的形状可以如马赛克一样,既符合…

FPGA图案--数字表示(代码+波形)

在数字逻辑系统,仅仅存在高低。所以用它只代表一个整数数字。并且有3代表性的种类。这是:原码表示(符号加绝对值值)、反码表示(加-minus标志)而补码(符号加补)。这三个在FPGA中都有着广泛的应用。以下分别讨论。1、原码表示法 原码表示法是机器数的一种简…

WPF效果第一百八十四篇之网页视频保存

一年一度的小学入学采集开始了;我一朋友很是头大,他说头都大了好几圈了;既要准备各种入学材料又要听线上专人视频直播讲解;然而在直播结束后,他发现自己仍是一脸疑惑;虽说直播有回访吧,但是他那蜗牛网速简直了;这时他场外找我,让我看能不能给他自己下载一份;1、毕竟第一次,直接…

【遥感数字图像处理】基础知识:第一章 绪论

第一章 绪 论 ◆ 课程学习要求 主要教学内容:遥感数字图像处理的概念和基础知识,遥感数字图像的几何处理,遥感图像的辐射校正,遥感数字图像的增强处理,遥感图像的计算机分类,遥感数字图像的分析方法&…

自定义Git

在安装Git一节中,我们已经配置了user.name和user.email,实际上,Git还有很多可配置项。 比如,让Git显示颜色,会让命令输出看起来更醒目: $ git config --global color.ui true这样,Git会适当地显…

[python opencv 计算机视觉零基础到实战] 九、模糊

一、学习目标 了解什么是卷积了解模糊的使用方法与应用 如有错误欢迎指出~ 二、了解模糊的应用 上一篇:[python opencv 计算机视觉零基础到实战] 八、ROI泛洪填充 2.1 了解卷积是什么 在本节中,卷积我们不过多的进行深入讲解,我本人对卷积也只是稍…

windbg的时间旅行实现对 C# 程序的终极调试!

一:什么是时间旅行 简而言之就是把程序的执行流拍成vlog,这样就可以对 vlog 快进或者倒退,还可以分享给别人做进一步的分析,是不是想都不敢想。很开心的是 windbg preview 版本中已经实现了,叫做 时间旅行调试 TTD&…

【神经网络】神经网络结构在命名实体识别(NER)中的应用

命名实体识别(Named Entity Recognition,NER)就是从一段自然语言文本中找出相关实体,并标注出其位置以及类型,如下图。它是NLP领域中一些复杂任务(例如关系抽取,信息检索等)的基础。…

[python opencv 计算机视觉零基础到实战] 十、图片效果毛玻璃

一、学习目标 了解高斯模糊的使用方法了解毛玻璃的图片效果添加了解如何自己做一个噪声图片 上一篇:[python opencv 计算机视觉零基础到实战] 九、模糊 如有错误欢迎指出~ 二、了解模糊与美颜 2.1 使用高斯模糊降噪 由于很多小伙伴反应抛开原理或理论讲解使用用法对于初学…

Android之自定义View实现带4圆角或者2圆角的效果

1 问题 实现任意view经过自定义带4圆角或者2圆角的效果 2 原理 1) 实现view 4圆角 我们只需要把左边的图嵌入到右边里面去,最终显示左边的图就行。 2) 实现view上2圆角 我们只需要把左边的图嵌入到右边里面去,最终显示左边的图就行。 安卓源码里面有这样的类 package and…

java trim()函数_Java - split()函数和trim()函数的使用方法

split()函数和trim()函数的使用方法本文地址: http://blog.csdn.net/caroline_wendy/article/details/24465141详细參考Java API: http://docs.oracle.com/javase/6/docs/api/java/lang/String.htmlsplit()函数是依据參数如",", "-", " "等, 切割…

分布式服务器集群架构方案思考

0x01.大型网站演化 简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。 集群主要分为:高可用集群(High Availability Cluster),负载均衡集群(Load Balance Cluster&…

交互式 .Net 容器版

1背景介绍 在之前的文章 - 交互式 .Net 中已经介绍了什么是 交互式 .Net,文中是通过 Visual Studio Code 插件的方式实现 交互式 .Net 的。现在,我们将使用容器的方式实现 交互式 .Net。2镜像构建 1. DockerfileFROM mcr.microsoft.com/dotn…

Java 集合练习——3

创建Map集合,创建Emp对象,并将创建的Emp对象添加到集合中,并将id为005的对象从集合中移除 创建Emp类: package jihe;public class Emp {private String id;public String getId() {return id;}public void setId(String id) {this…

[python opencv 计算机视觉零基础到实战] 十一找到图片中指定内容

一、学习目标 了解图片内容定位方法matchTemplate使用了解minMaxLoc方法使用 上一篇《[python opencv 计算机视觉零基础到实战] 十、图片效果毛玻璃》 如有错误欢迎指出~ 二、了解从一张图片中找到指定内容的方法 2.1 使用matchTemplate函数对图片中的指定内容进行查找 有…

Linq 实现 DataTable 行转列

前几天写了一篇sqlserver 行转列,http://www.cnblogs.com/li-peng/archive/2012/02/01/2334973.html 由于工作需要,要把查出来的DataTable实现 行转列, 正好这一阵子在用Linq 就做了一个行转列的小例 子 转换前的table: 转换后的table: 代码…