Hibernate之HQL检索(查询)方式
HQL(Hibernate Query Language)是面向对象的查询语言,与SQL非常相似。在Hibernate中,HQL是使用最广泛的检索方式。
具有下面经常使用功能:
(1)在查询语句中,能够设定各种条件
(2)支持检出对象的部分属性,就是SQL语句中不用*,而是查询我们想查询的对象
(3)支持连接查询
(4)支持分页查询
(5)支持子查询
(6)支持动态绑定參数
(7)支持分组查询,能够用having,group by
(8)提供分组函数(内置聚集函数,sum(),count(),avg(),max(),min(),g)
(9)能够调用自己定义SQL函数
Session的find()方法和Query接口都支持HQL检索方式,特别注意,在Hibernate3就取消了find()方法,find()方法不具备动态绑定參数的功能,
检索与查询是一个意思,在面向对象中检索说得多,在sql中查询说得多。依据习惯去理解即可。
Query接口是真正的HQL查询方式的接口,懂它就够。
让我们先看个实例:
package com.lanhuigu.hibernate.test; import java.util.List; import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration; import com.lanhuigu.hibernate.entity.Customer; public class TestHibernateJianSuo {
public static void main(String[] args){
Configuration cfg = new Configuration().configure();
SessionFactory sessionFactory = cfg.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction tr = session.beginTransaction();
//1.创建Query对象
Query query = session.createQuery("from Customer where name=:v_name");//别习惯性的加上select
//2.动态绑定參数
query.setString("v_name", "test");
//3.运行SQL返回查询结果
List list = query.list();
//4.输出结果
for (int i=0;i<list.size();i++) {
Customer customer = (Customer) list.get(i);
System.out.println(customer.getName());
}
//5.事务提交
tr.commit();
//6.关闭session
session.close();
}
}
运行结果:
Hibernate: select customer0_.ID as ID1_0_, customer0_.NAME as NAME2_0_, customer0_.EMAIL as EMAIL3_0_, customer0_.PASSWORD as PASSWORD4_0_, customer0_.PHONE as PHONE5_0_, customer0_.ADDRESS as ADDRESS6_0_, customer0_.SEX as SEX7_0_, customer0_.IS_MARRIED as IS8_0_, customer0_.DESCRIPTION as DESCRIPT9_0_, customer0_.IMAGE as IMAGE10_0_, customer0_.BIRTHDAY as BIRTHDA11_0_, customer0_.REGISTERED_TIME as REGISTE12_0_, customer0_.HOME_PROVINCE as HOME13_0_, customer0_.HOME_CITY as HOME14_0_, customer0_.HOME_STREET as HOME15_0_, customer0_.HOME_ZIPCODE as HOME16_0_, customer0_.COMP_PROVINCE as COMP17_0_, customer0_.COMP_CITY as COMP18_0_, customer0_.COMP_STREET as COMP19_0_, customer0_.COMP_ZIPCODE as COMP20_0_ from CUSTOMERS customer0_ where customer0_.NAME=? test
实例分析Query接口支持的HQL查询方式的运行步骤:
(1)创建一个Query对象。对象里面包括查询SQL。SQL中包括命名參数v_name.
(2)动态绑定參数。依据Query接口提供的參数命名方法,设置HQL的參数。比方,query.setString("v_name", "test");
(3)运行查询语句。返回list集合,集合中存放符合条件的持久化对象。
比如。当调用query.list()时,运行sql,返回customer持久化对象的集合。
(4)支持链式变成风格。就是将可连接代码连接在一起,做到简洁,明了。比如:
将上面代码查询部分整合例如以下:
List list = session.createQuery("from Customer c where name=:v_name")
.setString("v_name", "test")
.list();
运行查询效果一样。
Hibernate之HQL检索(查询)方式的更多相关文章
- hibernate的三种查询方式
hibernate的三种查询方式 目录 hibernate的三种查询方式 1.HQL查询 1.1.SQL概述 1.2.实体查询 1.3.带where的查询 1.3.属性查询 1.4.实体的更新和删除 ...
- Hibernate的四种查询方式(主键查询,HQL查询,Criteria查询,本地sql查询)和修改和添加
Hibernate的添加,修改,查询(三种查询方式)的方法: 案例演示: 1:第一步,导包,老生常谈了都是,省略: 2:第二步,创建数据库和数据表,表结构如下所示: 3:第三步创建实体类User.ja ...
- Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询
HQL查询方式 这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了 ...
- Hibernate第四天——查询方式
Hibernate入门最后一天第四天,我们进行查询方式的更进一步的细化: 先看一下大致的Hibernate的提供的查询的方式: 1.对象导航查询 2.OID查询 3.HQL查询 4.QBC查询 5.本 ...
- Hibernate 之HQL数据查询
1. HQL简介 HQL是面向对象的查询语言,与SQL查询语言相比,虽然在语法上类似,都是运行时进行解析,但HQL并不像SQL那样操作的是数据表,列等数据库对象,HQL所操作的对象是类,对象,属性等. ...
- hibernate学习笔记6--Criteria查询方式、完整小练习(开发步骤)
一.Criteria查询方式没有sql语了,因此更加面向对象一些.Criteria是一种比HQL更面向对象的查询方式:Criteria的创建方式: Criteria c = s.createCrite ...
- Java_Web三大框架之Hibernate+jsp+HQL分页查询
分页查询无处不在.使用Hibernate+jsp+HQL进行分页查询. 第一步:编写房屋实体类和House.hbm.xml映射. /* * 房屋实体类 */ public class House { ...
- hibernate hql 查询指定…
以数组的形式抛出,前台页面就要把它当成一个数组来处理 以对象抛出,就要当成一个对象来处理. 在JSP页面使用标签时一定要注意这点. 版权声明:本文为博主原创文章,未经博主允许不得转载.
- hibernate 查询方式汇总
主要摘自 http://blog.sina.com.cn/s/blog_7ffb8dd501014a6o.html ,http://blog.csdn.net/xingtianyiyun/artic ...
随机推荐
- Bag of Features (BOF)图像检索算法
1.首先.我们用surf算法生成图像库中每幅图的特征点及描写叙述符. 2.再用k-means算法对图像库中的特征点进行训练,生成类心. 3.生成每幅图像的BOF.详细方法为:推断图像的每一个特征点与哪 ...
- CF #261 div2 D. Pashmak and Parmida's problem (树状数组版)
Parmida is a clever girl and she wants to participate in Olympiads this year. Of course she wants he ...
- 3.十分钟读懂——App开发规范的业务流程
转自:http://www.itdaan.com/blog/2017/12/08/6bc06b3387a8d1238504355a6a1c6743.html 一.主要流程 二.产品立项 工作概述: ...
- django 简单会议室预约(2)
--我们先打开settings.py 配置文件: import os #指明django APP目录路径 BASE_DIR = os.path.dirname(os.path.dirname(os.p ...
- 1.1selenium 介绍
1.1selenium 介绍selenium 是一个 web 的自动化测试工具,不少学习功能自动化的同学开始首选 selenium , 相因为它相比 QTP 有诸多有点:* 免费,也不用再为破解 QT ...
- robotframework Selenium2+RFS自动化测试
支持浏览器版本:Google Chrome (64位) 52.0.2743.82 正式版 52.0.2743.6_chrome_installer 64位 下载地址:http://www.online ...
- 【习题 6-10 UVA - 246】10-20-30
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 发牌的那个牌堆用一个deque,7个牌堆用vector来模拟. 然后按照题意模拟就好. 不难. [代码] /* 1.Shoud it ...
- Could not find action or result: There is no Action mapped for namespace [/] and action name [GetG
Could not find action or result: /car/GetGpsDataAction There is no Action mapped for namespace [/] ...
- 以流的形式接收Http请求
IEnumerable<ReportObject> IHttpReceiveReport.OnPost(System.Web.HttpContextBase context) { //[{ ...
- Lucene 查询方式
QueryParser类 QueryParser类对输入字符串的解析 格 式 含 义 “David” 在默认的字段中检索“David”关键字 “content:David” 在“conte ...