package com.etc.test;

import java.util.List;
import java.util.Properties;

import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;

import com.etc.dao.HibernateSessionFactory;
import com.etc.entity.Person;
import com.etc.entity.Sex;

public class hql查询 {
static void 完整对象的查询()
{
//1 获取连接
Session s = HibernateSessionFactory.getSession();
//2 构造hql语句
String hql = "from Person where pname like '老%'";
//3 执行查询
List<Person> list = s.createQuery(hql).list();

//4 遍历结果
for(Person p:list)
{
System.out.println(p);
}
//5 关闭连接
HibernateSessionFactory.closeSession();
}

static void 部分字段的查询()
{
//1 获取连接
Session s = HibernateSessionFactory.getSession();
//2 构造hql语句。只返回部分字段
String hql = "select pid,pname from Person where pname like '老%'";

//3 执行查询
List<Object[]> list = s.createQuery(hql).list();
//4 遍历

for(Object[] fields:list)
{
//把每条记录的字段显示查询
for(Object field:fields)
{
System.out.print(field+"\t");
}
System.out.println();
}
//5 关闭连接
HibernateSessionFactory.closeSession();

}

static void 关联条件查询()
{
//1 获取连接
Session s = HibernateSessionFactory.getSession();

//a 显式关联(inner join关键字)
//2 构造hql语句
String hql = "from Person as p inner join p.sex as s " +
"where s.sexname like '男%'";
//3 执行查询.获得主对象和关联对象
List<Object[]> list = s.createQuery(hql).list();

//4 遍历结果
for(int i=0;i<list.size();i++)
{
Person p = (Person) list.get(i)[0];
System.out.println(p);
}


//b 隐式关联.推荐使用
/*2 构造hql语句。使用关联对象的属性作为约束条件。
String hql = "from Person where sex.sexname like '女%'";
//3 执行查询
List<Person> list = s.createQuery(hql).list();

//4 遍历结果
for(Person p:list)
{
System.out.println(p);
}

*/
//5 关闭连接
HibernateSessionFactory.closeSession();
}
static void 聚合查询()
{
//1 获取连接
Session s = HibernateSessionFactory.getSession();

//2 构造hql语句
/*
String hql = "select '记录的总数:'||cast(count(pid),string) from Person";


List<Object> list = s.createQuery(hql).list();
System.out.println(list.get(0));
*/
//分组查询,统计各个性别的人数
String hql = "select '人数:'||cast(count(pid),string),'性别名:'||sex.sexname from Person " +
"group by sex";
List<Object[]> list = s.createQuery(hql).list();
for(Object[] fields:list)
{
//把每条记录的字段显示查询
for(Object field:fields)
{
System.out.print(field+"\t");
}
System.out.println();
}
//5 关闭连接
HibernateSessionFactory.closeSession();
}

static void 分页查询()
{
//1 获取连接
Session s = HibernateSessionFactory.getSession();
//2 构造hql语句
String hql = "from Person where pname like '老%'";
//3 执行查询.第3到6条记录
Query q = s.createQuery(hql);
q.setFirstResult(2);//设置起点
q.setMaxResults(4);//设置条数
List<Person> list = q.list();

//4 遍历结果
for(Person p:list)
{
System.out.println(p);
}
//5 关闭连接
HibernateSessionFactory.closeSession();

}

static void 命名查询()
{
//1 获取连接
Session s = HibernateSessionFactory.getSession();

//3 执行查询
List<Person> list = s.getNamedQuery("find_unusual_sex").list();

//4 遍历结果
for(Person p:list)
{
System.out.println(p);
}
//5 关闭连接
HibernateSessionFactory.closeSession();
}

static void 动态参数查询() //支持?的hql语句
{
//1 获取连接
Session s = HibernateSessionFactory.getSession();
//a ?作为动态参数
//String hql = "from Person where pname like ?";
//b 取参数别名。
//c 设置查询属性
//d 关联查询
String hql = "from Person where sex =:sex";
//String hql = "from Person where pname like :name " +
// "and sex.sexname =:sex";
Query q = s.createQuery(hql);

//a 按照位置指定
//q.setString(0,"%白%"); //与jdbc不同,从0开始
/*b 按照别名进行指定
q.setParameter("name", "%老%");
q.setParameter("sex", "女性");
*/
/*c 采用构造"查询属性"的方法
Properties pro = new Properties();
pro.setProperty("name","%老%");
pro.setProperty("sex", "女性");
q.setProperties(pro);
*/
//d 设置关联对象作为查询条件
Sex sex = new Sex();
sex.setSexid(2); //只有sex.主键作为查询条件。
q.setEntity("sex", sex);//将对象作为sex参数的查询条件
//3 执行查询
List<Person> list = q.list();

//4 遍历结果
for(Person p:list)
{
System.out.println(p);
}
//5 关闭连接
HibernateSessionFactory.closeSession();
}

static void sql的查询()
{
//1 获取连接
Session s = HibernateSessionFactory.getSession();
//2 构造sql语句。找出人数最多的性别名,及它的人数
//
SQLQuery q = (SQLQuery) s.getNamedQuery("find_max_count_sex");

//3 执行查询
List<Object[]> list = q.list();
//4 遍历

for(Object[] fields:list)
{
//把每条记录的字段显示查询
for(Object field:fields)
{
System.out.print(field+"\t");
}
System.out.println();
}
//5 关闭连接
HibernateSessionFactory.closeSession();
}

public static void main(String[] args)
{
//完整对象的查询();
//部分字段的查询();
//关联条件查询();
//聚合查询();
//分页查询();
//命名查询();
//动态参数查询();
sql的查询();
}
}

hibernate----(Hql)查询的更多相关文章

  1. Hibernate HQL查询:

    Hibernate HQL查询:Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查 ...

  2. Hibernate HQL查询语句总结

    Hibernate HQL查询语句总结 1. 实体查询:有关实体查询技术,其实我们在先前已经有多次涉及,比如下面的例子:String hql="from User user ";L ...

  3. 转: Hibernate HQL查询 插入 更新(update)实例

    1.实体查询:有关实体查询技术,其实我们在先前已经有多次涉及,比如下面的例子:String hql=”from User user ”;List list=session.CreateQuery(hq ...

  4. 第六讲(二) Hibernate HQL查询

    HQL查询:Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此Hibe ...

  5. Hibernate HQL查询的参数绑定

    参数绑定: Hibernate中对动态查询参数绑定提供了丰富的支持,那么什么是查询参数动态绑定呢?其实如果我们熟悉传统JDBC编程的话,我们就不难理解查询参数动态绑定,如下代码传统JDBC的参数绑定: ...

  6. Hibernate学习笔记-Hibernate HQL查询

    Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库 ...

  7. hibernate HQL查询参数设置

    Hibernate中对动态查询参数绑定提供了丰富的支持,那么什么是查询参数动态绑定呢?其实如果我们熟悉传统JDBC编程的话,我们就不难理解查询参数动态绑定,如下代码传统JDBC的参数绑定: Prepa ...

  8. Hibernate HQL查询 插入 更新(update)实例

    1.实体查询:有关实体查询技术,其实我们在先前已经有多次涉及,比如下面的例子:String hql=”from User user ”;List list=session.CreateQuery(hq ...

  9. Hibernate HQL查询(2)

    hql是面向对象查询,格式:from + 类名 + 类对象 + where + 对象的属性 sql是面向数据库表查询,格式:from + 表名 + where + 表中字段 1.查询 一般在Hiber ...

  10. Hibernate HQL查询(1)

    1. 查询整个映射对象所有字段 //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段           String hql ="from Users";   ...

随机推荐

  1. android之MP3播放器(1)

    该播放器只是对本地的MP3文件进行简单的播放 布局文件 布局文件中设置了三个按钮分别来进行播放.暂停和继续播放 <?xml version="1.0" encoding=&q ...

  2. javascript正则表达式验证IP,URL

    验证IP function isIP(ipstr){ var reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[ ...

  3. nodepad++快捷键收集

    Notepad++ 快捷键 大全Ctrl+C 复制Ctrl+X 剪切Ctrl+V 粘贴Ctrl+Z 撤消Ctrl+Y 恢复Ctrl+A 全选Ctrl+F 键查找对话框启动Ctrl+H 查找/替换对话框 ...

  4. iOS -- 神战

    http://github.ibireme.com/github/list/ios/# https://github.com/Tim9Liu9/TimLiu-iOS http://www.ios122 ...

  5. 收藏Javascript中常用的55个经典技巧

    1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键 <table border oncontextmenu ...

  6. oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务。

    来源于:http://www.cnblogs.com/wangfg/p/5110831.html 一.查询系统中的job,可以查询视图 --相关视图 select * from dba_jobs; s ...

  7. pdo简单操作

    PDO(PHP Data Object) 是PHP 5新出来的东西,在PHP 6都要出来的时候,PHP 6只默认使用PDO来处理数据库,将把所有的数据库扩展移到了PECL,那么默认就是没有了我们喜爱的 ...

  8. org.apache.commons.lang3.ArrayUtils 学习笔记

    package com.nihaorz.model; /** * @作者 王睿 * @时间 2016-5-17 上午10:05:17 * */ public class Person { privat ...

  9. ArcGIS 帮助(10.2、10.2.1 和 10.2.2)收集

    帮助首页 [Oracle基础] 快速浏览:Oracle 地理数据库 什么是 Oracle Spatial? 设置到 Oracle 的连接 存储在 Oracle 地理数据库中的系统表 结合企业级地理数据 ...

  10. editplus-查找替换的正则表达式应用

    editplus查找替换的正则表达式应用 表达式 说明 \t 制表符. \n 新行. . 匹配任意字符. | 匹配表达式左边和右边的字符. 例如, "ab|bc" 匹配 " ...