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检索方式,分页查询,命名查询语句,投影查询,报表查询
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
随机推荐
- VC++6.0一些常见问题解决方法(打开多个窗口、行号、添加文件无响应、更改.exe图标及名称等等)
背景: 最近使用VC++6.0做一个界面,供测试CAN通信使用.由于客户希望我们提供简单方便的函数接口让其最快速使用CAN,DLL(动态链接库)是不二之选.做DLL需要两个VC窗口进行测试才方便.可是 ...
- Ubuntu 14 常用“快捷键”,Ctrl + Alt + F1 进入终端,按 Ctrl + Alt + F7 回到界面
Ubuntu中所谓 Super键,就是 Windows建,一般在键盘的 ctrl 和 alt 2个键之间,一个微软窗口的图标. 1.持续按住 Super键,会弹出“键盘快捷键”大全: 2.修改快捷键路 ...
- Mac Pro 安装 Adobe Photoshop CC for mac V2014 破解版
一.下载 Photoshop CC for mac V2014 原版(.dmg 文件): 百度网盘下载1 百度网盘下载2 百度网盘下载3 百度网盘下载4 百度网盘下载5 百度网盘下载6 百度网盘下载7 ...
- ThinkPHP框架表单验证
对注册到test表的表单进行验证 在注册之前要对表单进行验证: 用户名非空验证,两次输入密码必须一致即相等验证,年龄在18~50之间即范围验证,邮箱格式正则验证. 自动验证是ThinkPHP模型层提供 ...
- Js控制iFrame切换加载网址
<html> <head> <title>Js控制 iFrame 切换加载网址</title> </head> <body> & ...
- HDU 5651 计算回文串个数问题(有重复的全排列、乘法逆元、费马小定理)
原题: http://acm.hdu.edu.cn/showproblem.php?pid=5651 很容易看出来的是,如果一个字符串中,多于一个字母出现奇数次,则该字符串无法形成回文串,因为不能删减 ...
- [Effective JavaScript 笔记]全书总结
这本书中就像它前言中说的那样,这本书不是给初学者的.需要一定的基础,而且有一定的编码实践,才能很好的理解书里讲到的内容.学习一门编程语言,需要熟悉它的语法.形式和结构,这样才会编写合法的.符合语义的. ...
- gradle类重复的问题解决方法
今天遇到一个gradle的类重复问题,学习到一个命令 gradle -q dependencies,可以查看项目里包的依赖关系,发生这个错误是因为我用了一个相册的项目,这个项目里用到了v4包,我自己的 ...
- 如何使用coding.net
由于我有一位十分聪明能干的室友会使用coding.net,于是我决定奉献一下室友的智慧,告诉大家如何使用conding.net上交作业.(如有说错的地方希望大家可以指出来) 首先登陆codin ...
- word20161201
http://baike.baidu.com/link?url=ZTTkA-suMlJNGb2AeNBE2E6MZQZwjkvWXKgmUpeLBIrCfC-k32cGJOJLrtDlLXjsTfkD ...