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. python 爬虫1

    简单访问有道词典的翻译界面,将页面翻译功能简单呈现 import urllib.request import urllib.parse import json content = input(&quo ...

  2. maven 项目配置

    创建java web的maven项目方法有两种,一是先创建maven项目,再选择jdk 和 dynamic web 运行环境 ,二是创建java项目,然后转化为maven项目 1.将普通java项目转 ...

  3. PHP get_class 返回对象的类名

    get_class (PHP 4, PHP 5) get_class — 返回对象的类名 说明 string get_class ([ object $obj ] ) 返回对象实例 obj 所属类的名 ...

  4. ajax异步提交数据动态更改select选项

    <!DOCTYPE html> <html> <head> <title></title> <script src="../ ...

  5. Linux DDoS 木马再度来袭

    导读 Linux用户又有一个木马需要苦恼了,就像以往一样,这些黑客大多部署在被劫持的Linux系统上,并在接受到命令后发起DDoS攻击. 发现这件事的Dr.Web的安全研究人员说:“木马似乎是通过破壳 ...

  6. awk系列:在awk中如何使用流程控制语句

    导读 当你回顾所有到目前为止我们已经覆盖的 awk 实例,从 awk 系列的开始,你会注意到各种实例的所有指令是顺序执行的,即一个接一个地执行.但在某些情况下,我们可能希望基于一些条件进行文本过滤操作 ...

  7. 使用C++扩展Python的功能 转自:http://blog.csdn.net/magictong/article/details/8897568#comments

    使用C++扩展Python的功能 环境 VS2005Python2.5.4 Windows7(32位) 简介 长话短说,这里说的扩展Python功能与直接用其它语言写一个动态链接库,然后让Python ...

  8. 160809209_李梦鑫_C语言程序设计实验2 选择结构程序设计

    实验2-1 输入3个数,并按由大到小的顺序输出. 实验要求: 编写一个C程序,输入3个数,并按由大到小的顺序输出. 源码:#include <stdio.h> int main() { i ...

  9. BZOJ 1461: 字符串的匹配

    Description 同上题. Sol KMP+树状数组. 写这题的时候我灰常naive...不管了...直接贴代码... Code /******************************* ...

  10. [mysql] Some non-transactional changed tables couldn't be rolled back

    使用peewee的事务时,碰到一个郁闷的问题,事务似乎无效! 于是简化了下模型,写了简单的测试代码,发现问题,如题所示. 找到解答: https://github.com/etianen/django ...