Hibernate--------八大类HQL查询集合
一:属性查询(SimplePropertyQuery)
1,单一属性查询
*返回结果集属性列表,元素类型和实体类中相应的属性一致
2, 多个属性查询,
* 返回集合中的元素是object数组,
* 其中数组元素的类型和对应属性在实体类中的类型一致
代码:
for(Iterator iterator=list.iterator();iterator.hasNext();)
{
Object[] obj=(Object[])iterator.next();
System.out.println("sid:="+obj[0].toString()+" sname:="+obj[1]);
}
3, 通过hql来动态实例化对象
代码:
List list=session.createQuery("select new Student(sid,sname) from Student").list();
for (Iterator iterator=list.iterator();iterator.hasNext();){
Student student=(Student) iterator.next();
System.out.println("sid:="+student.getSid()+" sname:="+student.getSname());
}
4,采用别名查询
代码:
//List list=session.createQuery("select s.sid, s.sname from Student as s").list();
List list=session.createQuery("select s.sid, s.sname from Student s").list();
二:简单对象查询(SimplyObjectQuery)
1,返回对象集合(可以忽略select)
代码:
//List list=session.createQuery("from Student").list();
//List list=session.createQuery("from Student as s").list();
List list=session.createQuery("from Student s").list();
2,采用select查询对象
* 必须要使用别名
代码:
//List list=session.createQuery("select s from Student as s").list();
List list=session.createQuery("select s from Student s").list();
3,查询单一对象的操作
代码:
Object obj=session.createQuery("select s from Student s where s.sid=:mysid")
.setParameter("mysid", 12)
.uniqueResult();
4,分页查询
* setFirstResult(int firstResult)
* Set the first row to retrieve.
* If not set, rows will be retrieved beginnning from row 0.
* firstResult - a row number, numbered from 0
代码:
List list=session.createQuery("select s from Student s")
.setFirstResult(5)
.setMaxResults(5)
.list();
三:简单条件查询(SimpleConditionQuery)
1,可以拼凑字符串
代码:
List stuList=session.createQuery("select s.sid, s.sname from Student as s where s.sname like '%1%'").list();
2,注意:可以采用?占位的方式来传递参数
*参数的索引从0开始
*传递的参数值不能用''号括起来
*注意方法链编程
代码:
/*
*Query query=ession.createQuery("select s.sid, s.sname from Student as s where s.sname like ?");
*query.setParameter(0, "%1%");
*List stuList=query.list();
*/
List stuList=session.createQuery("select s.sid, s.sname from Student as s where s.sname like ?")
.setParameter(0, "%1%")
.list();
3,通过参数名(:参数名)传参的方式进行查询
代码:
/*Object obj=session.createQuery("select s.sid, s.sname from Student as s where s.sname like :myname and s.sid=:myid")
.setParameter("myname", "%1%")
.setParameter("myid", 98)
.uniqueResult();//.list();
Object[] objs=(Object[])obj;
System.out.println("s.sid:="+objs[0].toString()+" s.sname:="+objs[1].toString());
*/
List stuList=session.createQuery("select s.sid, s.sname from Student as s where s.sname like :myname and s.sid=:myid")
.setParameter("myname", "%1%")
.setParameter("myid", 98)
.list();
4,传递多个参数的查询
* 支持in查询,需要setParameterList("myids", new Object[]{12,13,14})的方式进行参数传递
代码:
List stuList=session.createQuery("select s.sid, s.sname from Student as s where s.id in(:myids)")
.setParameterList("myids", new Object[]{12,13,14})
.list();
5, 查询2009年2月入学的学员信息
*支持Sql函数查询
代码:
List stuList=session.createQuery("select s.sid, s.sname ,s.schoolDate from Student as s where year(s.schoolDate)=:myyear and month(s.schoolDate)=:mymonth")
.setParameter("myyear", 2009)
.setParameter("mymonth", 2)
.list();
6,查询2009-02-10到2009-02-15号入学的学员信息
*注意:在进行日期查询时
*setParameter("startDate", formatter.parse("2009-02-10 00:00:00"))
*方法中第二个参数是一个Object对象(Date类型对象)
代码:
SimpleDateFormat formatter=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List stuList=session.createQuery("select s.sid, s.sname ,s.schoolDate from Student as s where s.schoolDate between :startDate and :endDate")
.setParameter("startDate", formatter.parse("2009-02-10 00:00:00"))
.setParameter("endDate", formatter.parse("2009-02-15 23:59:59"))
.list();
四:原生SQL语句查询(SqlQueryTest_4)
*这里用的是createSQLQuery().list();
代码:
List stuList=session.createSQLQuery("select * from Student").list();
五:外置命名查询(NamedQueryTest_5)
* 1.在映射文件中采用<query>标签来定义HQL语句,不必限定文件!!!注意:映射文件中的HQL语句不可以出错,否则会导致 QuerySyntaxException,特别是要查询的实体类名写错的情况。(Error in named query: selectAllStudents org.hibernate.hql.ast.QuerySyntaxException: Students is not mapped)。
* 2.在程序中通过session.getNamedQuery(hql_name)得到查询语句
代码:
List list=session.getNamedQuery("selectAllStudents")
.setParameter("mysid",12).list();
六:对象导航查询(ObjectNavQueryTest_6)
代码:
List list= session.createQuery("select s.sname from Student as s where s.clsInfo.cname like :myname")
.setParameter("myname", "%1%")
.list();
七:联合查询(JoinQueryTest_7)
1,联合查询* 内连接查询
* 获取已经参加班级报名的所有学生名号和其所在班级名称
代码:
List list=session.createQuery("select s.sname,c.cname from Student as s join s.clsInfo as c").list();
2,联合查询* 左连接查询
* 获取所有班级名称和其学员姓名
* 以班级信息表为主表,进行左外连接查询
代码:
List list=session.createQuery("select c.cname ,s.sname from ClassInfo as c left join c.studentSet as s").list();
3,联合查询 * 右连接查询
* 获取所有学员姓名和其所属班级名称
* 以学员信息表为主表,进行右外连接查询
代码:
List list=session.createQuery("select s.sname, c.cname from ClassInfo as c right join c.studentSet as s").list();
八:(StateQueryTest_8)
1,聚合函数使用
代码:
//List list=session.createQuery("select count(*) from Student").list();
//long count=(Long) list.get(0);
long count=(Long) session.createQuery("select count(*) from Student").uniqueResult();
2,分组查询
代码:
List list=session.createQuery("select c.cname, count(s) from Student as s inner join s.clsInfo as c group by c.cname order by c.cname").list();
Hibernate--------八大类HQL查询集合的更多相关文章
- Hibernate中关于HQL查询返回List<Object>数据的结果集问题
---恢复内容开始--- 开发中遇到的一个小问题,使用Hibernate中的HQL查询时,使用query.list()查询出来的是一个List<Object>结果集 原来代码: publi ...
- 【Hibernate步步为营】--hql查询小介
HQL 是指Hibernate Query Language,它是Hibernate的查询语言,拥有一套自己的查询机制,它的查询语句和SQL非常类似.在使用的时候可以非常快上手.HQL提供了基本上SQ ...
- Hibernate框架之HQL查询与Criteria 查询的区别
Hibernate框架提供了HQL查询和Criteria 查询.下面对这两种查询分别做个例子.也好对这两种查询方法有个大概的了解.就用房屋信息表做例子,查询所有房屋信息. HQL语句查询所有房屋信息: ...
- Hibernate用到HQL查询时的错误
Exception in thread "main" org.hibernate.hql.internal.ast.QuerySyntaxException: student is ...
- hibernate学习(7)——HQL查询
1.HQL查询定义 Hibernate查询分类: 1. get/load 根据OID检索 2. 对象视图检索 c.getOrders 3. Sql语句 createSqlQuery 4. Hql语句 ...
- Hibernate中的HQL查询与缓存机制
HQL:完全面向对象查询 SQL的执行顺序: 1.From 2.Where 过滤基础数据 where与having的区别:1.顺序不同 2.where过滤基础数据 3. 过滤聚合函数 3.Group ...
- Hibernate学习之hql查询语句
* 页面上数据的字段和数据库中字段差不多,这个时候,采用迫切连接 结构比较好,如果页面上的字段很少,要按照需求加载数据,采用带构造函数的select查询 实例讲解:转自:http://www.cn ...
- Java_Web三大框架之Hibernate+jsp+selvect+HQL查询数据
俗话说:"好记性不如烂笔头".本人学习Hibernate也有一个星期了,对Hibernate也有一个初步的了解.下面对Hibernate显示数据做个笔记,使用租房系统的Hibern ...
- Hibernate(十二):HQL查询(一)
概述 Hibernate提供了以下几种检索对象的方式 1)导航对象图检索方式:根据已经加载的对象导航到其他对象: 2)OID检索方式:按照对象的OID来检索对象: 3)HQL检索方式:使用面向对象的H ...
随机推荐
- React Native学习笔记
React 是使用ES6 ,支持JSX语法, 开发组件化web或native的工具. 现阶段使用Babel工具转换成ES5 代码. 组件通过props属性传递不变化的内容,UI通过state属性变动来 ...
- Android 手机卫士--参照文档编写选择器
本文来实现<Android 手机卫士--导航界面1的布局编写>中的图片选择器部分的代码. 本文地址:http://www.cnblogs.com/wuyudong/p/5944356.ht ...
- 手机游戏渠道SDK接入工具项目分享(三)拨开云雾是个坑
一直在纠结是先写框架设计还是先写掉过的坑,最后本这娱乐大众的态度先写掉过的坑让大家乐呵下. 项目开发过程中遇问题无数,回顾下8个大坑照成了项目一定程度上延期甚至返工. 项目一开始几个人把现有3家主流的 ...
- Android WebView 302斗争之旅
一.背景 越来越多的业务接入,项目内多多少少会出现几个H5页面,只是单纯的提供WebView容器接入H5页面根本满足不了需求,他们需要登录态,需要制定协议控制Native的导航栏,或者需要JsBrid ...
- Extjs5 tree扩展----treepanel树组件
Ext.define('MyExtend.lib.TreeFilter', { filterByText: function(text) { this.f ...
- Web性能优化:基本思路和常用工具
听了荣华的演讲之后,我对性能优化有了更深层次的认识. 性能优化的重要性 性能优化是为了赢得用户,为了降低成本. 性能优化思路 Web常见优化点 Java常见排查工具
- SQL Server中删除重复数据
delete from A ) )
- 织梦dedecms漏洞修复大全(5.7起)
很多人说dedecms不好,因为用的人多了,找漏洞的人也多了,那么如果我们能修复的话,这些都不是问题. 好,我们来一个一个修复.修复方法都是下载目录下该文件,然后替换或添加部分代码,保存后上传覆盖(记 ...
- [转]An introduction to OAuth 2.0 using Facebook in ASP.NET Core
本文转自:http://andrewlock.net/an-introduction-to-oauth-2-using-facebook-in-asp-net-core/ This is the ne ...
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...