HQL ,Hibernate Query Language ,是Hibernate查询语言,不直接操作数据表,而是操作实体类,根据实体类和对应数据表中的映射关系,查找数据。

下面是hql的基本步骤:

 1.获取session 

  session=new Configuration().configure().buildSessionFactory().openSession();

 2.构建hql语句
  String hql="from Dept ";

 3.得到query对象
  Query query=session.createQuery(hql);

 4.得到查到的结果

  List<Dept> list=query.list();

  或者

  Iterator<Dept> it=query.iterate();

下面是几个hql例子

①职位是店员,如:job='CLERK'

工资大于1000元,如:salary>1000

 入职时间在1981年4月1日至1985年9月9日之间

 public void SearchCondition(){
/**
* 职位是店员,如:job='CLERK'
* 工资大于1000元,如:salary>1000
* 入职时间在1981年4月1日至1985年9月9日之间
*/
Session session=null;
try {
session=new Configuration().configure().
buildSessionFactory().openSession();
//1.通过辅助类对象统一处理命名参数
//创建辅助类的对象
ConditionEmp cm=new ConditionEmp();
cm.setJob("CLERK");
cm.setSalary(566666);
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
cm.setHireDateBegin(sdf.parse("2000-10-27"));
cm.setHireDateEnd(sdf.parse("2003-12-12")); StringBuilder hql=new StringBuilder("from Emp as emp where 1=1"); //上面的数据有的有,有的木有
if(null!=cm.getJob()){
//工作不是空的
hql.append(" and emp.job=:job");
} if(0!=cm.getSalary()){
hql.append(" and emp.salary>:salary");
}
if(null!=cm.getHireDateBegin()){
hql.append(" and emp.hiredate>:hireDateBegin");
}
if(null!=cm.getHireDateEnd()){
hql.append(" and emp.hiredate<:hireDateEnd");
}
Query query=session.createQuery(hql.toString());
//处理命名参数
query.setProperties(cm); List<Emp> list=query.list();
for (Emp emp : list) {
System.out.println(emp.getEmpno());
System.out.println(emp.getEmpname());
}
} catch (Exception e) {
e.printStackTrace();
}finally{
session.close();
}
}

② hql分页

  

 public void pageDemo(){
Session session=null;
try {
session=new Configuration().configure().
buildSessionFactory().openSession();
String hql="from Emp order by empno"; Query query=session.createQuery(hql);
//每页显示几条数据
int pageSize=2; //计算总记录(总条数)
String countHql="select count(*) from Emp"; //接收数字
int count=((Long)session.createQuery(countHql).uniqueResult()).intValue(); //计算总页数
int totalPage=(count%pageSize==0)?(count/pageSize):(count/pageSize+1); //页号
int pageIndex =1; //设置每页显示的最大记录数字
query.setMaxResults(pageSize);
//设置从第几条开始输出,不包括该条
query.setFirstResult((pageIndex-1)*pageSize); List<Emp> list=query.list();
System.out.println("总页数是:"+totalPage); for (Emp emp : list) {
System.out.println(emp.getEmpno());
System.out.println(emp.getEmpname()); } } catch (Exception e) {
e.printStackTrace();
}finally{
session.close();
}
}

 

HQL查询的更多相关文章

  1. Hibernate--------八大类HQL查询集合

    Hibernate的   八大类HQL查询集合 Hibernate的八大类HQL查询集合: 一:属性查询(SimplePropertyQuery) 1,单一属性查询 *返回结果集属性列表,元素类型和实 ...

  2. [NHibernate]HQL查询

    目录 写在前面 文档与系列文章 查询的几种方式 HQL查询 一个例子 总结 写在前面 上篇文章介绍了nhibernate在项目中的基本配置,包括数据库连接字符串的设置,映射文件的配置及需注意的地方,这 ...

  3. hibernate学习(7)——HQL查询

    1.HQL查询定义 Hibernate查询分类: 1. get/load 根据OID检索 2. 对象视图检索 c.getOrders 3. Sql语句 createSqlQuery 4. Hql语句 ...

  4. HQL查询——聚集函数

    HQL查询--聚集函数 HQL也支持在选出的属性上使用聚集函数.HQL支持的聚集函数与SQL的完全相同: (1)avg:计算属性平均值: (2)count:统计选择对象的数量: (3)max:统计属性 ...

  5. HQL查询——关联和连接

    HQL查询--关联和连接 为了便于理解有关的使用关联和连接进行HQL查询,首先提供两个具有关联关系的持久化类:Person类和MyEvent类 Person类: import javax.persis ...

  6. HQL查询——from子句

    HQL查询--from子句 1.from是最基本的HQL语句,from关键字后紧跟持久化类的类名: from Person 表示从Person持久化类中选出全部的实例. 2.推荐为持久化类的每个实例起 ...

  7. HQL查询——HQL查询的基本用法

    HQL查询--HQL查询的基本用法 1.HQL语法类似于SQL语法,但是需要注意的是,HQL是一种完全面向对象的查询语言.SQL语言操作的对象是数据表.列等数据库对象,而HQL语言的操作对象是类.实例 ...

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

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

  9. NHibernate系列文章二十二:NHibernate查询之HQL查询(附程序下载)

    摘要 NHibernate提供了多种查询方式,最早的HQL语言查询.Criteria查询和SQL Query,到NHibernate 3.0的Linq NHibernate,NHIbernate 4. ...

  10. HQL查询语句

    查询语言 Hibernate 查询语言(HQL)是一种面向对象的查询语言,类似于 SQL,但不是去对表和列进行操作,而是面向对象和它们的属性. HQL 查询被 Hibernate 翻译为传统的 SQL ...

随机推荐

  1. redux-simple 简化版的redux

    作为react的粉丝,当然要吐槽一下react组件通信问题.react的单向数据流是组件通信的一大阻碍,只允许父组件向子组件传值,子组件向父组件传值只能通过父组件向子组件传递回调函数实现.如果在深层次 ...

  2. pydev新工程

    http://www.cnblogs.com/linjiqin/p/3595891.html 明天再编辑一下

  3. 武汉科技大学ACM :1001: A+B for Input-Output Practice (I)

    Problem Description Your task is to Calculate a + b. Too easy?! Of course! I specially designed the ...

  4. C/C++中unsigned char和char的区别

    代码: #include <cstdio> #include <iostream> using namespace std; int main(){ unsigned char ...

  5. QT 5.1.1 for Android 开发环境搭建与配置【Windows 7】

    前言:本人操作系统为Windows7 64位,用的是32位的安装包,32位系统没有验证. 一.首先下载以下安装包,如果提供的链接失效请自行下载: (1) Android SDK (Windows 32 ...

  6. xdebug使用说明

    常用配置 xdebug.var_display_max_children整数类型,默认值128.用于控制通过xdebug_var_dump(),var_dump()方法时显示数组中子数组的个数或对象中 ...

  7. LNMP笔记:域名重定向、读写权限、显示WP主题、北京时间

    边写边记,以后还会用到的. 将 xxx.com 重定向到 www.xxx.com 1.打开 /usr/local/nginx/conf/vhost/你网站的域名.com.conf 2.查看原有的 se ...

  8. JSP网页防止sql注入攻击

    SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使 ...

  9. d017: 打印某年某月有几天

    内容: 打印某年某月有几天 输入说明: 一行两个整数,前面是年份 后面是月份 输出说明: 一个整数 输入样例:   2009 6 输出样例 : 30 #include <stdio.h> ...

  10. d3可视化实战01:理解SVG元素特性

    一. SVG简介 ————————————————————————————————————————————————————————————————— SVG是一种和图像分辨率无关的矢量图形格式,它使用 ...