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检索方式,分页查询,命名查询语句,投影查询,报表查询
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
随机推荐
- CentOS的SSH,Putty配置说明
基本资源: CentOS5.5 (32位) , Mysql6.0 ,Putty ,SSH Step: 1.VMWare中装好CentOS A. 可能存在ifconfig等命令无法正常识别) ...
- VC++ 6.0使用定时器SetTimer;
背景: windows中使用VC++6.0制作了个交互界面向下位机定时发送数据及显示下位机上传的数据.定时发送则需要使用定时器. 本文只做记录如何调用,原理以后再深究. 正文: 首先,我生成的窗体类名 ...
- MySQL监控系统MySQL MTOP的搭建(转VIII)
MySQLMTOP是一个由Python+PHP开发的MySQL企业级监控系统.系统由Python实现多进程数据采集和告警,PHP实现WEB展示和管理.最重要是MySQL服务器无需安装任何Agent,只 ...
- hash-4.hashtable
1.先看hashtable的源代码 public synchronized V put(K key, V value) { // Make sure the value is not null if ...
- SDK 移动应用开发系统
AppCan SDK 是一套跨平台移动应用开发系统,基于业内领先的Hybrid App 开发引擎,采用HTML5 标准作为开发语言,支持一次开发多平台适配.AppCan SDK 提供应用向导和界面向导 ...
- Android本地数据存储之SQLite关系型数据库 ——SQLiteDatabase
数据库的创建,获取,执行sql语句: 框架搭建:dao 思考: 1.数据库保存在哪里? 2.如何创建数据库?如何创建表? 3.如何更新数据库?如何更改表的列数据? 4.如何获取数据库? 5.如何修改数 ...
- iOS开发——UI进阶篇(十)导航控制器、微博详情页、控制器的View的生命周期
一.导航控制器出栈 1.initWithRootViewController本质 UIViewController *vc = [[OneViewController alloc] init]; // ...
- 分析Masonry
一. 继承关系 1.MASConstraint (abstract) MASViewContraint MASComposisionConstraint 2. UIView NSLayoutConst ...
- Python类的特点 (3) :静态方法与类方法
Python中的方法有4种: 1)模块中的全局方法,不属于任何类,用"模块名.方法名"形式调用. 2)类中定义的实例方法,也被称为绑定方法(Bound method),这种方法的第 ...
- InstallUtil在windows服务中的使用(转)+ 服务安装的注意事项
1. 新建一个Windows Service的方法: 1. 打开Visual Studio 2008新建一个project Solution: 2. 选择Windows->windows Se ...