Hibernate查询语句
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查询语句的更多相关文章
- Hibernate查询语句HQL8大特点
Hibernate拥有一种功能非常强大的查询语言,这种语言被有意得与SQL非常相似,便于开发人员掌握.但不要被HQL的语法表面所迷惑,HQL完全是面向对象的,可以用来过程多态.继承.关联等关系. 1. ...
- Hibernate 查询语句用法记录
Hibernate 查询MatchMode的四种模式 MatchMode.START:字符串在最前面的位置.相当于"like 'key%'" MatchMode.END:字符串在最 ...
- Hibernate 查询语句
Hibernate查询语言(HQL)是一种面向对象的查询语言,类似于SQL,但不是对表和列操作,HQL适用于持久对象和它们的属性. HQL查询由Hibernate转换成传统的SQL查询,这在圈上的数据 ...
- hibernate查询语句hql中的占位符?参数与命名参数:name设值方式搞混
先贴出异常 Struts has detected an unhandled exception: Messages: Position beyond number of declared ordin ...
- hibernate查询语句实例代码
一.聚集函数的使用: avg(...), sum(...), min(...), max(...) count(*) count(...), count(distinct ...), count(al ...
- Hibernate 查询语句基本用法
转发: http://459104018-qq-com.iteye.com/blog/720538
- Hibernate 插入,修改,删除,查询语句
/* *具体操作hibernate的类 *增加,删除,修改,按ID查询,模糊查询,查询全部 **/ public class PersonOperate { //在hibernate中所有操作都是由S ...
- Hibernate的基本查询语句
1.最简单的查询 List<Special> specials = (List<Special>)session.createQuery("select spe fr ...
- [原创]java WEB学习笔记90:Hibernate学习之路-- -HQL检索方式,分页查询,命名查询语句,投影查询,报表查询
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
随机推荐
- oracle删除表以及清理表空间
若要彻底删除表,则使用语句:drop table <table_name> purge; 清除回收站里的信息 清除指定表:purge table <table_name>; 清 ...
- 打开Excel的报错,提示:不能使用对象链接和嵌入
计算机这几天在打开Excel文档的时候,提示:不能使用对象链接和嵌入, 而且出现如下的提示:Microsoft Office Excel进程已停止工作, 每次打开Excel的时候都是同样的问题,害我跟 ...
- CSS中font-size、font-family、line-height顺序以及简写属性
顺序: font-size line-height font-family body { font-size: 12px}; h1 { font: bold 200%/1.2 ...
- 01什么是ExtJs?
前言: 我之前是搞EasyUI+KO.js的,由于最近项目需要用到ExtJs.因此.边学边记录我的学习历程,希望能给自己和大家一点帮助. 1.0什么是ExtJs? 首先,什么是ExtJs呢?ExtJs ...
- Codeforces Round #340 Watering Flowers
题目: http://www.codeforces.com/contest/617/problem/C 自己感觉是挺有新意的一个题目, 乍一看挺难得(= =). 其实比较容易想到的一个笨办法就是:分别 ...
- BZOJ3052——糖果公园
0.题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3052 1.题目大意:给定一颗n个点的无根树,每个点有一个颜色,要进行q次操作,有两种操 ...
- Android学习笔记(七)——常见控件
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! Android 给我们提供了大量的 UI控件,下面我们简单试试几种常用的控件. 一.TextView 在布局文 ...
- 使用json存储结构化数据
从文件中读写字符串很容易.数值就要多费点儿周折,因为read ()方法只会返回字符串,应将其传入int()这样的函数,就可以将'123'这样的字符串转换为对应的数值 123.当你想要保存更为复杂的数据 ...
- class training
实验3-1 分别使用while循环.do while循环.for循环求 (即求1+2+3+ --+100). 参考: 源码 方法一#include<stdio.h> int main(){ ...
- uploadify 一款优秀的上传插件
官方网址:www.uploadify.com 使用文档:www.uploadify.com/documentation 效果如下 注释以及文件结构已经过本人修改,和官方的有些出入. index.php ...