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…

【经典回放】JavaScript学习详细干货笔记之(三)

【经典回放】JavaScript学习详细干货笔记之(一) 【经典回放】JavaScript学习详细干货笔记之(二) 【经典回放】JavaScript学习详细干货笔记之(三) 一、再次从var开始说起 var到底是什么? 在前面的所有介绍中, JavaScript的var变量说明、是非常令人迷惑的事情。 var中…

WinUI迁移到.NET MAUI个人体验

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

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

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

Android之Only fullscreen opaque activities can request orientation

1 问题 使用透明的activity主题,并且固定了方向,在Android8.0手机上提示错误如下 Only fullscreen opaque activities can request orientation 2 解决办法 简单粗暴就是去在AndroidManifest.xml文件去掉当前activity配置的里面的横竖屏方向设置 and…

wamp5.5.12安装re dis扩展

转载地址:http://hanqunfeng.iteye.com/blog/1984387 phpredis是个人觉得最好的一个php-redis客户端,因为其提供的function与redis的命令基本一致,降低的了学习成本,同时功能也很全面。 一。linux安装方法 phpredis下载地址&#…

java 数组转bean_json数组转java对象怎么转

展开全部首先需要 commons-beanutils jar包,然后转bean的方法为:62616964757a686964616fe59b9ee7ad9431333363386133/**** Title: transMap2Bean* param:param map* param:param obj* return:void* Description&#x…

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

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

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

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

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

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

Android之Canvas的drawRoundRect()

1 问题 Canvas的drawRoundRect()函数怎么用 public void drawRoundRect(RectF rect, float rx, float ry, Paint paint) 功能:该方法用于在画布上绘制圆角矩形,通过指定RectF对象以及圆角半径来实现。float rx:生成圆角的椭圆的X轴半径 float ry:生成圆角的椭圆的Y轴半径…

201671010128 2017-10-08《Java程序设计》之Lambda与内部类

一、基本概念 Java Lambda 表达式是 Java 8 引入的一个新的功能,主要用途是提供一个函数化的语法来简化编码。Lambda表达式本质上是一个匿名方法。Java Lambda 表达式以函数式接口为应用基。内部类(inner class)是定义在另一个类内部的类。二、几点注意 使用内部类的…

自定义Git

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

java抽象方法实例_Java的抽象方法和抽象类实例详解

本文实例讲述了Java的抽象方法和抽象类。分享给大家供大家参考,具体如下:一 点睛抽象方法是只有方法签名,没有方法实现的方法。抽象方法和抽象类必须使用abstract修饰符来定义,有抽象方法的类只能被定义为抽象类,抽象类…

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

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

windows update更新失败 安全模式进不去

今天一同事的电脑遇到问题了,提示“windows update更新失败”。最后一次正确配置不行, 安全模式进不去。解决方法:强制关机开机后F8启动修复模式(系统盘或者pe进入也可以),系统还原,找最后的还原…

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

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

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

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

centos安装禅道的步骤

1、下载 XAMPP 套件: https://sourceforge.net/projects/xampp/files/XAMPP%20Linux/stats/timeline 下载的文件是 xampp-linux-x64-7.0.6-0-installer.run 2、 执行 ./xampp-linux-x64-7.0.6-0-installer.run 3、 启动 /opt/lampp/lampp start 4、 下载禅道 ZenTa…