1 hql查询

Hibernate的查询语句,hiberante提供的面向对象的查询语言,和sql语句的语法的相似.而且严格区分大小写。

1.1 from字句

 /**
* hql: from 字句
* ***/
@Test
public void testFromHql()
{
//获得Session对象
Session session=sf.openSession();
String hql="from Dept";
//获得部门对象的集合
List<Dept> dlist = session.createQuery(hql).list();
for(Dept d:dlist){
System.out.println(d.getDname());
}
//释放资源
session.close();
}

语法:from  类名

1 from  类名

返回值就是该类对应的对象的集合

2 关联查询

From   类名1,…类名N  返回值为Object类的数组的集合

Object类型数组中元素为:类名1  ….类名N对应的对象

1.2 select字句

select:后指定一个属性

Select:后指定两个属性

 /**
* hql: select 字句
* select查询获得不是某个pojo类的对象集合
* ***/
@Test
public void testSelectHql()
{
//获得Session对象
Session session=sf.openSession();
//select:后面指定一个属性
/*String hql="select dname from Dept";
//获得指定属性类型对应的集合
List<String> dlist = session.createQuery(hql).list();
for(String d:dlist){
System.out.println(d);
}*/
//select:后面指定多个属性
String hql="select did,dname from Dept";
//获得Object类型数组的集合
List<Object[]> dlist = session.createQuery(hql).list();
for(Object[] d:dlist)
{
System.out.println(d[0]+"\t"+d[1]);
}
//释放资源
session.close();
}

Select返回值三种情况

1 select 指定一个属性

返回值为属性对应的类型的集合

2 select指定n个属性

返回值为Object[]数组的集合,数组中元素为指定属性对应的值

3 select获得结果为单行单列

直接返回Object类型的对象,uniqueResult()

1.3关联查询

 /***
* 关联查询
* ***/
@Test
public void testJoinHql()
{
//获得Session对象
Session session=sf.openSession();
/*String hql="from Dept d,Post p where d.did=p.dept.did";
//获得Object类型的数组集合,数组中元素是关联的pojo类对象
List<Object[]> dlist = session.createQuery(hql).list();
for(Object[] d:dlist){
//System.out.println(d[0]+"\t"+d[1]);
Dept dept=(Dept)d[0];
Post post=(Post)d[1];
System.out.println(dept.getDname()+"\t"+post.getPname());
}*/
String hql="select d.dname,p.pname from Dept d,Post p where d.did=p.dept.did";
//获得Object类型的数组集合,数组中元素是select后面指定的属性
List<Object[]> dlist = session.createQuery(hql).list();
for(Object[] d:dlist)
{
System.out.println(d[0]+"\t"+d[1]);
}
//释放资源
session.close();
}

1.4连接查询

 /***
* 内连接:inner join
* ***/
@Test
public void testInnerJoinHql()
{
//获得Session对象
Session session=sf.openSession();
String hql="from Dept d inner join d.posts ";
List<Object[]> list = session.createQuery(hql).list();
//遍历结果集
for(Object[] arr:list)
{
System.out.println(arr[0]+"\t"+arr[1]);
}
//释放资源
session.close();
}
/***
* 做外连接:left join
* ***/
@Test
public void testLeftJoinHql()
{
//获得Session对象
Session session=sf.openSession();
String hql="from Dept d left join d.posts p ";
List<Object[]> list = session.createQuery(hql).list();
//遍历结果集
for(Object[] arr:list)
{
System.out.println(arr[0]+"\t"+arr[1]);
}
//释放资源
session.close();
}

不需要指定关联的条件,
hibernate根据映射文件自动关联

1.5聚合和分组查询

 /***
* 聚合和分组查询
* max
* min
* avg
* sum
* ***/
@Test
public void testFunGroup()
{
//获得Session对象
Session session=sf.openSession();
/***获得每个部门下的岗位人数***/
String hql="select p.dept.dname ,count(pid) from Post p group by p.dept.did ";
List<Object[]> list = session.createQuery(hql).list();
//遍历结果集
for(Object[] arr:list)
{
System.out.println(arr[0]+"\t"+arr[1]);
}
//释放资源
session.close();
}

1.6 where 字句

和属性的表达式写法一样

And    or    not

<   >=   <=

In , not in

Like,not like

Between    and

1.7 order by字句

2 条件查询

标准的面向对象的查询,

 public class TestMany2One
{
/**
* 通过静态代码块加载配置文件
* ****/
static SessionFactory sf=null;
static
{
//1 创建Configuration对象,用来加载hibernate的配置文件
Configuration cfg = new Configuration();
//2加载配置文件
cfg.configure("hibernate.cfg.xml");
//3通过cfg构造一个会话工厂对象
sf=cfg.buildSessionFactory();
}
/**
* criteria:查询所有(所有列,所有行)
* ***/
@Test
public void testCriteria()
{
//获得Session对象
Session session=sf.openSession();
List<Dept> list=session.createCriteria(Dept.class, "d").list();
for(Dept d:list){
System.out.println(d.getDname());
}
//释放资源
session.close();
}
/**
* criteria:查询所有(所有列,所有行)
* 进行结果的过滤
* ***/
@Test
public void testCriteria2()
{
//获得Session对象
Session session=sf.openSession();
Criteria c = session.createCriteria(Dept.class, "d");
//加where过滤条件
//c.add(Restrictions.eq("d.did", 11));
//c.add(Restrictions.like("d.dname", "安慰%"));
//c.add(Restrictions.)
List<Dept> list = c.list();
for(Dept d:list)
{
System.out.println(d.getDname());
}
//释放资源
session.close();
}
/**
* criteria:查询所有(所有列,所有行)
* 进行结果的过滤
* 查询指定的列:进行投影查询Projections
* ***/
@Test
public void testCriteria3()
{
//获得Session对象
Session session=sf.openSession();
Criteria c = session.createCriteria(Dept.class, "d");
//查询指定的列
c.setProjection(Projections.projectionList().add(Projections.property("dname"))
.add(Projections.property("did")));
List<Object[]> list = c.list();
for(Object[] d:list)
{
System.out.println(d[0]+"\t"+d[1]);
}
//释放资源
session.close();
}
/**
* criteria:查询所有(所有列,所有行)
* 进行结果的过滤
* 查询指定的列:进行投影查询Projections
* 投影,聚合 ,分组
*
* ***/
@Test
public void testCriteria4()
{
//获得Session对象
Session session=sf.openSession();
Criteria c = session.createCriteria(Dept.class, "d");
//查询指定的列
c.setProjection(Projections.projectionList().add(Projections.property("d.dname"))
.add(Projections.property("d.did"))
.add(Projections.count("d.did"))
.add(Projections.groupProperty("d.dname")));
List<Object[]> list = c.list();
for(Object[] d:list)
{
System.out.println(d[0]+"\t"+d[1]+"\t"+d[2]);
}
//释放资源
session.close();
}
/***
* 关联查询
*
* ****/
@Test
public void testCriteria5()
{
//获得Session对象
Session session=sf.openSession();
Criteria c = session.createCriteria(Dept.class, "d");
//关联岗位
c.createAlias("d.posts", "p");
//查询指定的列
//c.add(Restrictions.eqProperty("d.did", "p.dept.did"));
List<Dept> list = c.list();
for(Dept d:list)
{
System.out.print(d.getDname()+"\t");
Set<Post> posts=d.getPosts();
for(Post p:posts)
{
System.out.print(p.getPname()+"\t\t");
}
System.out.println();
}
//释放资源
session.close();
}
}

3 Hql语句的参数封装

 /**
* Hql:的参数
* ***/
@Test
public void testHqlParam()
{
//获得Session对象
Session session=sf.openSession();
//定义hql语句,hql语句中包含占位符
String hql="from Dept d where d.dname=? ";
session.createQuery(hql).setString(0, "研发部");
//常用的
String hql2="from Dept d where d.dname=:dname";
List<Dept> list=session.createQuery(hql2).setString("dname", "研发部").list();
for(Dept d:list)
{
System.out.println(d.getDid()+"\t"+d.getDname());
}
//释放资源
session.close();
}

1 from  类名

返回值就是该类对应的对象的集合

2 关联查询

From   类名1,…类名N

返回值为Object类的数组的集合

Object类型数组中元素为:类名1

….类名N对应的对象

Select返回值三种情况

1 select 指定一个属性

返回值为属性对应的类型的集合

2 select指定n个属性

返回值为Object[]数组的集合,数组中元素为指定属性对应的值

3 select获得结果为单行单列

直接返回Object类型的对象,uniqueResult()

不需要指定关联的条件,
hibernate根据映射文件自动关联

Hibernate查询语句的更多相关文章

  1. Hibernate查询语句HQL8大特点

    Hibernate拥有一种功能非常强大的查询语言,这种语言被有意得与SQL非常相似,便于开发人员掌握.但不要被HQL的语法表面所迷惑,HQL完全是面向对象的,可以用来过程多态.继承.关联等关系. 1. ...

  2. Hibernate 查询语句用法记录

    Hibernate 查询MatchMode的四种模式 MatchMode.START:字符串在最前面的位置.相当于"like 'key%'" MatchMode.END:字符串在最 ...

  3. Hibernate 查询语句

    Hibernate查询语言(HQL)是一种面向对象的查询语言,类似于SQL,但不是对表和列操作,HQL适用于持久对象和它们的属性. HQL查询由Hibernate转换成传统的SQL查询,这在圈上的数据 ...

  4. hibernate查询语句hql中的占位符?参数与命名参数:name设值方式搞混

    先贴出异常 Struts has detected an unhandled exception: Messages: Position beyond number of declared ordin ...

  5. hibernate查询语句实例代码

    一.聚集函数的使用: avg(...), sum(...), min(...), max(...) count(*) count(...), count(distinct ...), count(al ...

  6. Hibernate 查询语句基本用法

    转发: http://459104018-qq-com.iteye.com/blog/720538

  7. Hibernate 插入,修改,删除,查询语句

    /* *具体操作hibernate的类 *增加,删除,修改,按ID查询,模糊查询,查询全部 **/ public class PersonOperate { //在hibernate中所有操作都是由S ...

  8. Hibernate的基本查询语句

    1.最简单的查询 List<Special> specials = (List<Special>)session.createQuery("select spe fr ...

  9. [原创]java WEB学习笔记90:Hibernate学习之路-- -HQL检索方式,分页查询,命名查询语句,投影查询,报表查询

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

随机推荐

  1. C语言:输入输出

    C语言无I/O语句,i/o操作由函数实现 #include<stdio.h> 字符输出函数putchar: 格式:putchar(c) 参数:c为字符常量,变量或者表达式 功能:把字符c输 ...

  2. 一张图告诉你,只会jQuery还不够!

    会了jquery语法,会了jquery函数,你就真的会了jquery吗,来看这张图!是超实用的jquery代码段一书的导览!熊孩子们,赶紧学习去吧! 对于码农来说,代码就是生产力,你每天能码多少行并不 ...

  3. soj4271 Love Me, Love My Permutation (DFS)

    4271: Love Me, Love My Permutation Description Given a permutation of n: a[0], a[1] ... a[n-1], ( it ...

  4. Mac Pro 编译安装 PHP 5.6.21 及 问题汇总

    [系统环境] 操作系统:OS X 10.11.5 Xcode:7.3.1 [注意] 编译之前,需要安装 xcode.Homebrew 套件! Mac Pro 安装 Homebrew 软件包管理工具 1 ...

  5. Lab1--关于安装JUnit的简要描述

    安装JUnit的过程描述: 下载两个jar包: hamcrest-all-1.3.jar junit-4.12.jar 注意在导入完成jar包之后不要随意改变jar包的路径. 创建java程序,书写如 ...

  6. eclipse安装spring插件

    1.打开eclipse点击help,点击about eclipse 2.点击最左侧图票查看eclipse版本 3.查看版本 4.进入http://spring.io/tools/sts/all,选择适 ...

  7. .net 默认时间格式不正确

    经测试发现,有时通过在“日期.时间.语言和区域设置”里面设置是无效的. 对应键值为HKEY_LOCAL_MACHINE"SOFTWARE"Microsoft"OLEAUT ...

  8. python 集合 -----直接用逗号连接的是元组,不是list

    t = 12345, 54321, 'hello!' >>> t[0] 12345 >>> t (12345, 54321, 'hello!') 元组:元组由逗号分 ...

  9. SSH-Struts第一弹:ActionSupport类

    Action继承了com.opensymphony.xwork2.ActionSupport. package com.candy.login; import com.opensymphony.xwo ...

  10. ZUI前段框架简介

    一.说明 基于Bootstrap定制 ZUI继承了Bootstrap 3中的大部分基础内容,但出于与Bootstrap不同的目的,一些组件都进行了定制和修改.这些变化包括: 移除了部分插件的限制,增加 ...