1.HQL:(Hibernate Query Language) 是面向对象的查询语言

1.实体查询

  1. public void testQueryAllDept(){
  2. String hql="from Employee";
  3. //hql="from com.sh.Entity";
  4. Query query=session.createQuery(hql);
  5. List<Employee> list= query.list();
  6. //...
  7. }

2.有条件的 实体查询

  1. public void testQueryAllDept(){
  2. String hql="from Deptas model where mode.deptName='人事部' ";
  3. //hql="from com.sh.Entity";
  4. Query query=session.createQuery(hql);
  5. List<Employee> list= query.list();
  6. //...
  7. }
  8. public void testQueryAllDept(){
  9. String hql="from Deptas model where mode.deptName like '%部%' ";
  10. //hql="from com.sh.Entity";
  11. Query query=session.createQuery(hql);
  12. List<Employee> list= query.list();
  13. //...
  14. }
  15. public void testQueryDeptByGt(){
  16. String hql="from Dept model where model.createDate> '2012-03-10'";
  17. Query query=session.createQuery(hql);
  18. List<Employee> list= query.list();
  19. }

3.HQL 中的各种运算符

运算符类型 HQL运算符 含义
比较运算 = 等于
  <> 不等于
  > 大于
  >= 大于等于
  <= 小于等于
  < 小于
  is null 为空
  is not null 不为空
范围运算 in 等于列表中的某一值
  not in 不等于列表中的任意一个值
  between  p1 and p2 大于等于值1  且 小于等于值2
  not between p1 and p2 小于值1 或者 大于 值2
字符串模式匹配 like 字符串模式匹配
逻辑运算 and
  or
  not

3.更新 删除

  1. public void testModifyDate(){
  2. Transaction tr=session.beginTransaction();
  3. Dept detp=(Dept)session.get(Detp.class,new Integer(6));
  4. detp.seteCreateDate("2000-03-10");
  5. tr.commit();
  6. }
  7. // delete  删除
  8. public void testDelDeptByHql(){
  9. Transaction tr=session.beginTransaction();
  10. String hql="delete Dept as model where model.deptId=6";
  11. Query query=session.createQuery(hql);
  12. query.executeUpdate();
  13. tr.commit();
  14. }

4.属性查询

  1. public void testQueryDeptName(){
  2. String hql="select model.deptName from Dept as model";
  3. Query query=session.createQuery(hql);
  4. List<String> deptNameList=query.list();
  5. //...
  6. }
  7. public void testQueryDeptName(){
  8. String hql="select model.deptName,model.createDate from Dept as model";
  9. Query query=session.createQuery(hql);
  10. List<Object[]> prsList=query.list();
  11. for(){
  12. }
  13. //...
  14. }
  15. //采用对象进行 保存 查询的字段(要添加 对应字段的构造方法)
  16. public void testQueryDeptName(){
  17. String hql="select new Dapt(model.deptName,model.createDate) from Dept as model";
  18. Query query=session.createQuery(hql);
  19. List<Dept> deptList=query.list();
  20. for(Dept d:deptList){
  21. d.setDeptName("test");
  22. session.saveOrUpdate(dept);
  23. }
  24. //...
  25. }
  26. //如果采用对象 保存上面查询出来的对象  如果对其进行更新的操作 是不会成功的
  27. public void testSaveDept(){
  28. Transction  tr=session.beginTransactino();
  29. String hql="select new Dept(model.deptName,model.createDate) from Dept as model";
  30. Query query=session.createQuery();
  31. List<Dept> deptList=query.list();
  32. for(Dept dept:deptList){
  33. System.out.println(dept.deptName);
  34. dept.setDetpName("test");
  35. session.saveOrUpdate(dept);
  36. }
  37. tr.commit();
  38. // 最后 根本就没有更新 而是 在数据库中 插入 新的记录
  39. }

5.使用函数

  1. public void testQuyeryFunction(){
  2. String hql="select count(*),min(model.createDate) from Dept as model";
  3. Query query=session.createQuery(hql);
  4. List<Object[]> paramsList=query.list();
  5. for(){
  6. }
  7. //...
  8. }

6.分组 与 排序

  1. //排序
  2. public void testQueryOrderBy(){
  3. String hql="from Dept as mode order by   model.createDate,model.deptName desc";
  4. Query query=session.createQuery();
  5. List<Dept> deptList=query.list();
  6. for(){}
  7. //
  8. }
  9. //分组 并且 使用  having 筛选
  10. public void testQueryGroupBy(){
  11. String hql="select count(model),model.deptName from Dept as model group by model.deptName having count(model)>1";
  12. Query query=session.createQuery();
  13. List<Object[]> list=query.list();
  14. //...
  15. }

7.查询单个对象

  1. public void testQueryUn(){
  2. String hql="select model.deptName from Dept as model where model.deptId=2";
  3. Query query=session.createQuery(hql);
  4. query.setMaxResults(1);
  5. String deptName=(String)query.uniqueResult();
  6. System.out.println(deptNamae);
  7. }

8.绑定参数 
释义:Hibernate中也采用了preparedStatement作为底层数据库的的访问方式,与之对应的SQL语句 可以重用preparedStatement对象, 首先会预编译,然后缓存起来,提高性能.

1.使用 ":"加参数名 绑定参数

  1. public void  testQueryByParamsName(){
  2. //使用  ":参数名" 来传递参数
  3. String hql="from Dept as model where
  4. odel.deptName=:deptName and model.createDate=:createDate";
  5. Query query=session.createQuery(hql);
  6. query.setString("deptName","test");
  7. query.setString("ceateDate","2000-02-10");
  8. List<Dept> deptList=query.list();
  9. for(){}
  10. //...
  11. }

2.使用 "?" 按照位置来绑定参数

  1. public void testQueryByParamsID(){
  2. String hql="from Dept as model where model.deptName=? and model.createDate=?";
  3. Query query=session.createQuery(hql);
  4. query.setString(0,"test");
  5. query.setString(1,"2000-02-02");
  6. List<Dept> list=query.list();
  7. for(){}
  8. //..
  9. }

3.采用setEntity() 将参数和一个持久化对象进行绑定

  1. public void testQueryByDept(){
  2. Dept dept=(Dept)Session.get(Dept.clas,new Integer(2));
  3. String hql="select Employee  as model where model.dept=?"
  4. Query query=session.createQuery(hql);
  5. query.setEntity(0,dept);
  6. List<Employee> empList=query.list();
  7. for(){}
  8. //..
  9. }

4.setParameter() 用于绑定任意类型的参数

  1. public void testQueryBySetParams(){
  2. String hql="from Dept as model where model.deptName=?";
  3. Query query=session.createQuery(hql);
  4. query.setParameter(0,"test");
  5. List<Dept> deptList=query.list();
  6. for(){}
  7. //..
  8. }

5.setProperties() 将一个参数名 于一个对象的属性值绑定

  1. public void testQueryBySetPro(){
  2. Dept deptNew=new  Dept();
  3. deptNew.setDeptName("test");
  4. String hql="from Dept as model where model.deptName=:deptName";
  5. Query query=session.createQuery();
  6. query.setProperties(deptNew);
  7. List<Dept> deptList=query.list();
  8. for(){
  9. }
  10. //..
  11. }

10. 联合查询 
inner join

  1. public void testQueryInnerJoin(){
  2. String hql="from Dept as model inner join model1.employees as model2";
  3. Query query=session.createQuery(hql);
  4. List<Object[]> objList=query.list();
  5. for(Object[] obj:objList){
  6. Dept dept=(Dept)obj[0];
  7. Employee emp=(Employee)obj[1];
  8. System.out.println("xxxx");
  9. }
  10. }

left join

  1. public void testQueryLeftJoin(){
  2. String hql="from Dept as model left join model1.employees as model2";
  3. Query query=session.createQuery(hql);
  4. List<Object[]> objList=query.list();
  5. for(Object[] obj:objList){
  6. Dept dept=(Dept)obj[0];
  7. Employee emp=(Employee)obj[1]; //有可能为空 所以需要判断
  8. if(mep!=null){
  9. System.out.println("xxxx");
  10. }else{
  11. System.out.println(null);
  12. }
  13. System.out.println(dept.getDeptName());
  14. }
  15. }

right join

  1. public void testQueryRightJoin(){
  2. String hql="from Dept as model right join model1.employees as model2";
  3. Query query=session.createQuery(hql);
  4. List<Object[]> objList=query.list();
  5. for(Object[] obj:objList){
  6. Dept dept=(Dept)obj[0];
  7. Employee emp=(Employee)obj[1]; //有可能为空 所以需要判断
  8. if(dept!=null){
  9. System.out.println(dept.getDeptName());
  10. }else{
  11. System.out.println(null);
  12. }
  13. System.out.println("dd"+emp.getEmployeeName());
  14. }
  15. }

11.子查询

  1. public void testQueryChild(){
  2. String hql="from Dept as model where (select count(*) from model.employee) >2";
  3. Query query=session.createQuery(hql);
  4. List<Dept> objList=query.list();
  5. for(){}
  6. //..
  7. }

12 Criteria 查询 
释义:通过面向对象的设计将数据查询条件封装在一个对象

  1. //无条件
  2. public void testQueryDept(){
  3. Criteria criteria=session.createCriteria(Dept.class);
  4. List<Dept> deptList=criteria.list();
  5. for(){}
  6. //..
  7. }
  8. //添加条件
  9. public void testQueryDeptByName(){
  10. Criteria criteria=session.createCriteria(Dept.class);
  11. criteria.add(Expression.eq("deptName", "人事部"));
  12. List<Dept> deptList=criteria.list();
  13. for(){}
  14. //..
  15. }

SQL语法查询机制

方法 描述
Expression.eq 对应sql中的field =value
Expression.gt 对应sql中的field>value
Expression.ge 对应sql中的field>=value
Expression.lt 对应sql中的field<value
Expression.le 对应sql中的field<=value
Expression.between 对应sql中的between
Expression.like 对应 like
Expression.in 对应 in
Expression.eqProperty 用于比较两个属性之间的值,对应的Sql条件中field=field
Expression.gtProperty 用于比较两个属性之间的值,对Sqlfiled>field
Expression.geProperty 用于比较两个属性之间的值,对应sql field>=field
Expression.ltProperty 用于比较两个属性之间的值,对应field<field
Expression.leProperty 用于比较 两个属性之间的值,对应field<=field

Hibernate3中采用Restrictions类代替Expression

  1. public void  testQueryDeptByNameRe(){
  2. Criteria  criteria=session.createCriteria(Dept.class);
  3. criteria.add(Restrictions.eq("deptName", "人事部"));
  4. List<Dept> deptList=criteria.list();
  5. for(){}
  6. //..
  7. }

Criteria中限定返回的行数

  1. public void testQueryDept(){
  2. Criteria criteria=session.createCriteria(Dept.class);
  3. criteria.setFirstResult(2);
  4. criteria.setMaxResults(2);
  5. List<Dept> deptList=criteria.list();
  6. for(){}
  7. //..
  8. }

Criteria排序

    1. public void testQueryDept(){
    2. Criteria criteria=session.createCriteria(Dept.class);
    3. criteria.addOrder(Order.asc("createDate"));
    4. List<Dept> deptList=criteria.list();
    5. for(){}
    6. //..
    7. }

Hibernate 的HQL,QBC 查询语言的更多相关文章

  1. Hibernate之HQL查询

    一.Hibernate 提供了以下几种检索对象的方式: 导航对象图检索方式: 根据已经加载的对象导航到其他对象 OID 检索方式: 按照对象的 OID 来检索对象 HQL 检索方式:使用面向对象的 H ...

  2. Hibernate之HQL介绍

    Hibernate中提供了多种检索对象的方式,主要包括以下种类: 导航对象图检索方式:根据已经加载的对象导航到其他对象 OID检索方式:根据对象的OID来检索对象 HQL检索方式:使用面向对象的HQL ...

  3. Hibernate五 HQL查询

    HQL查询一 介绍1.HQL:Hibernate Query Language,是一种完全面向对象的查询语言.使用Hibernate有多重查询方式可供选择:hibernate的HQL查询,也可以使用条 ...

  4. hibernate的hql查询

    1.概念介绍 1.Query是Hibernate的查询接口,用于从数据存储源查询对象及控制执行查询的过程,Query包装了一个HQL查询语句. 2.HQL是Hibernate Query Langua ...

  5. Hibernate 的hql查询简介【申明:来源于网络】

    Hibernate 的hql查询简介[申明:来源于网络] Hibernate 的hql查询简介:http://blog.csdn.net/leaf_130/article/details/539329 ...

  6. Hibernate的hql语句save,update方法不执行

    Hibernate的hql语句save,update方法不执行 可能出现的原因问题: 未进行事务管理 需要进行xml事务配置或者注解方式的事务配置

  7. Hibernate学习---第九节:Hibernate之hql

    一.Hql 入门 1.实体类: package learn.hibernate.bean; import java.util.Date; import java.util.HashSet; impor ...

  8. Java_Web三大框架之Hibernate+jsp+HQL分页查询

    分页查询无处不在.使用Hibernate+jsp+HQL进行分页查询. 第一步:编写房屋实体类和House.hbm.xml映射. /* * 房屋实体类 */ public class House { ...

  9. Hibernate 查询方式(HQL/QBC/QBE)汇总

    作为老牌的 ORM 框架,Hibernate 在推动数据库持久化层所做出的贡献有目共睹. 它所提供的数据查询方式也越来越丰富,从 SQL 到自创的 HQL,再到面向对象的标准化查询. 虽然查询方式有点 ...

随机推荐

  1. linux下实现在程序运行时的函数替换(热补丁)【转】

    转自:http://www.cnblogs.com/leo0000/p/5632642.html 声明:以下的代码成果,是参考了网上的injso技术,在本文的最后会给出地址,同时非常感谢injso技术 ...

  2. ICTPOS3.0 词性标注集

    Ag 形语素 形容词性语素.形容词代码为a,语素代码g前面置以A. a 形容词 取英语形容词adjective的第1个字母. ad 副形词 直接作状语的形容词.形容词代码a和副词代码d并在一起. an ...

  3. Python中使用dom模块生成XML文件示例

    在Python中解析XML文件也有Dom和Sax两种方式,这里先介绍如何是使用Dom解析XML,这一篇文章是Dom生成XML文件,下一篇文章再继续介绍Dom解析XML文件. 在生成XML文件中,我们主 ...

  4. leetcode 之Implement strStr()(27)

    字符串的匹配,返回匹配开始的位置,直接用暴力方式求解.为了更快的匹配,定义一个指针表示待匹配的字符串的长度,当长度不足时,可 直接停止匹配. char *strStr(char *haystack, ...

  5. MAC Pro 2017款 无线上网慢

    MAC Pro 2017款 在无线路由器和MAC相隔一个房间,上网很慢,怀疑是无线路由器有问题,但其他几台老款MAC和PC上网正常.后来将蓝牙关掉,上网就很快了.

  6. 光流optical flow基本原理与实现

    光流(optical flow)是什么呢?名字很专业,感觉很陌生,但本质上,我们是最熟悉不过的了.因为这种视觉现象我们每天都在经历.从本质上说,光流就是你在这个运动着的世界里感觉到的明显的视觉运动(呵 ...

  7. hdu 4198:Quick out of the Harbour解题报告

    Quick out of the Harbour Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java ...

  8. 数据库索引(Index)【未完待续】

    数据库索引是啥?有什么用?原理是什么?最佳实践什么? 索引是啥 一个索引是这样的数据结构:从数据上来说,不仅包含了从表中某一列或多列的数据拷贝,同时,还包含了指向这列数据行的链接: 从结构上来说,索引 ...

  9. 说说WordPress的主查询函数-query_posts()

    今天说说WordPress 的主查询函数 -query_posts(),因为我正在制作的主题里面多次用到了这个函数 . query_posts()查询函数决定了哪些文章出现在WordPress 主 循 ...

  10. Go语言建立一个最简单的服务端点

    handlers/handlers.go package handlers import ( "encoding/json" "net/http" ) func ...