HQL实用技术
HQL是Hibernate Query Language的缩写,提供更加丰富灵活、更为强大的查询能力;HQL更接近SQL语句查询语法。
HQL基础查询
1.获取部分列 多列
/**
* 获取部分列 多列 Object[]
*/
@Test
public void testgetMultipelColumns(){
String hql="select d.dname,d.loc from Dept d";
Query query=session.createQuery(hql);
List<Object[]> list=query.list();
for (Object[] item:list){
for (Object items:item) {
System.out.println(items+"--");
}
System.out.println();
}
}
2.获取部分列 多列 list<强类型>
/**
* 获取部分列 多列 list<强类型>
*/
@Test
public void testgetMultipelColumns(){
String hql="select new Dept(d.deptno,d.dname,d.loc) from Dept d";
Query query=session.createQuery(hql);
List<Dept> list=query.list();
for (Dept dept:list){
System.out.println(dept.getDname());
}
}
HQL参数查询
使用字符串拼接查询条件存在各种弊端"from User where name = '" + name + "'"
性能低
不安全
使用占位符
按参数位置绑定
from User where name = ?
按参数名称绑定
from User where name = :name
/**
* 参数查询: 方案三::dname 参数名称绑定+对象属性
*/
@Test
public void selectByConditionParameternameAndObjectAttribute(){
//部门名称为SALES的部门信息
String hql="from Dept d where d.dname=:dname and d.loc=:loc";
Query query = session.createQuery(hql);
DeptModel model=new DeptModel();
model.setDname("SALES");
model.setLoc("CHICAGO");
query.setProperties(model);
List<Dept> list = query.list();
for (Dept dept:list) {
System.out.println(dept.getDname());
}
}
/**
* 参数查询: 方案二::dname 参数名称绑定
*/
@Test
public void selectByConditionParametername(){
//部门名称为SALES的部门信息
String hql="from Dept d where d.dname=:dname and d.loc=:loc";
Query query = session.createQuery(hql);
query.setParameter("dname","SALES");
query.setParameter("loc","CHICAGO");
List<Dept> list = query.list();
for (Dept dept:list) {
System.out.println(dept.getDname());
}
}
/**
* 参数查询: 方案一:? 匿名占位符
*/
@Test
public void selectByConditionNiming(){
//部门名称为SALES的部门信息
String hql="from Dept d where d.dname=? and d.loc=?";
Query query = session.createQuery(hql);
query.setParameter(0,"SALES");
query.setParameter(1,"CHICAGO");
List<Dept> list = query.list();
for (Dept dept:list
) {
System.out.println(dept.getDname());
}
}
动态查询
/**
* 动态sql
*/
@Test
public void selectByDynamic() throws ParseException {
EmpCondition emp=new EmpCondition();
emp.setJob("CLERK");
emp.setSal(1000.0);
//入职时间
emp.setFromDate(Tool.strDate("1891-05-01"));
//离职时间
emp.setEndDate(new Date());
//根据条件拼接sql
StringBuilder sb=new StringBuilder("from Emp e where 1=1 ");
if(emp.getJob()!=null){
sb.append("and e.job =:job ");
}
if(emp.getSal()!=null){
sb.append("and e.sal >:sal ");
}
if (emp.getFromDate()!=null){
sb.append("and e.hiredate >=:fromDate ");
}
if (emp.getEndDate()!=null){
sb.append("and e.hiredate <=:endDate ");
}
Query query=session.createQuery(sb.toString());
query.setProperties(emp);
List<Emp> list = query.list();
for (Emp item:list) {
System.out.println(item.getEname());
}
}
分页查询
Query接口的相关方法
uniqueResult() :获取唯一对象
setFirstResult() :设置从第几条开始
setMaxResults():设置读取最大记录数
/**
* 分页
*/
@Test
public void selectPage(){
String hql="from Emp order by empno";
Query query = session.createQuery(hql);
int pageIndex=1;
int pageSize=3;
query.setFirstResult((pageIndex-1)*pageSize);
query.setMaxResults(pageSize);
List<Emp> empList=query.list();
for (Emp emp:empList){
System.out.println(emp.getEname());
}
}
提取工具类:HibernateUtil.java
//线程变量
static ThreadLocal<Session> tlSession=new ThreadLocal<Session>();
public static SessionFactory factory;
static Configuration cfg=null;
static {
cfg=new Configuration().configure("hibernate.cfgscott.xml");
factory=cfg.buildSessionFactory();
}
//1.获取连接
public static Session getSession(){
//01 从线程中尝试获取
Session session=tlSession.get();
if (session==null){
session=factory.openSession();
tlSession.set(session);
}
return session;
}
//2.释放连接
public static void closeSession(){
Session session=tlSession.get();
if (session!=null){
tlSession.set(null);
session.close();
}
}
HQL实用技术的更多相关文章
- 第五章 HQL实用技术
第五章 HQL实用技术5.1 使用HQL查询语句(面向对象查询语句) 5.1.1 编写HQL语句 5.1.1.1 from子句 例:fr ...
- Hibernate=====HQL实用技术
Hibernate支持三种查询语言:HQL查询.Criteria查询和原生SQL查询 HQL(hibernate Query Language,hibernate查询语言)是一种面向对象查询语言,其中 ...
- Hibernate-02 HQL实用技术
学习任务 Query接口的使用 HQL基本用法 动态参数绑定查询 HQL的使用 Hibernate支持三种查询方式:HQL查询.Criateria查询.Native SQL查询. HQL是Hibern ...
- 深入HQL学习以及HQL和SQL的区别
HQL(Hibernate Query Language) 是面向对象的查询语言, 它和 SQL 查询语言有些相似. 在 Hibernate 提供的各种检索方式中, HQL 是使用最广的一种检索方式. ...
- hibernate -- HQL语句总结
1. 查询整个映射对象所有字段 //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段 String hql = "from Users"; Query query ...
- Hibernate 查询方式(HQL/QBC/QBE)汇总
作为老牌的 ORM 框架,Hibernate 在推动数据库持久化层所做出的贡献有目共睹. 它所提供的数据查询方式也越来越丰富,从 SQL 到自创的 HQL,再到面向对象的标准化查询. 虽然查询方式有点 ...
- hql中in关键字的用法
hql: from " + FoodComment.class.getName() + " f where f.id in :groupIds" 封装的方法: publi ...
- [转]HQL中的子查询
原文地址:http://blog.csdn.net/xb12369/article/details/8638683 子查询: 子查询是SQL语句中非常重要的功能特性,它可以在SQL语句中利用另外一 ...
- Hibernate--------八大类HQL查询集合
Hibernate的 八大类HQL查询集合 Hibernate的八大类HQL查询集合: 一:属性查询(SimplePropertyQuery) 1,单一属性查询 *返回结果集属性列表,元素类型和实 ...
随机推荐
- python接收邮件
# -*- coding: utf-8 -*- import poplib import email from email.parser import Parser from email.header ...
- 论文阅读笔记三十一:YOLO 9000: Better,Faster,Stronger(CVPR2016)
论文源址:https://arxiv.org/abs/1612.08242 代码:https://github.com/longcw/yolo2-pytorch 摘要 本文提出YOLO9000可以检测 ...
- Python enumerate() 函数
描述 enumerate() 函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中. Python 2.3. 以上版本可用,2. ...
- robocopy的用法,数据库局域网备份
robocopy,我主要是用来进行局域网数据库备份使用,不得不说这个小工具速度还是蛮快的,同时属于系统内置功能,用着还算方便. 这项功能就是RoboCopy,它是一个命令行的目录复制命令,自从Wind ...
- .NET C# 创建WebService服务简单的例子
Web service是一个基于可编程的web的应用程序,用于开发分布式的互操作的应用程序,也是一种web服务 WebService的特性有以下几点: 1.使用XML(标准通用标记语言)来作为数据交互 ...
- 解决Python安装模块出错 ImportError: No module named setuptools
1.下载ez_setup.py文件 下载地址:https://bootstrap.pypa.io/ez_setup.py 百度地址:http://pan.baidu.com/s/1jIgMO9w 2. ...
- java web获取请求体内容
Java Web中如何获取请求体内容呢? 我们知道请求方式分为两种:Get,Post. /*** * Compatible with GET and POST * * @param request * ...
- 强大的xargs
xargs 命令是最重要的 Linux 命令行技巧之一.你可以使用这个命令将命令的输出作为参数传递给另一个命令.例如,搜索 png 文件然后对其进行压缩或者其它操作: find. -name *.pn ...
- postgresql 查询某一个表中的所有字段
select * from information_schema.columns where table_schema='public' and table_name='表名称 ';
- Python select解析
一.首先列一下,sellect.poll.epoll三者的区别 1.select a.select最早于1983年出现在4.2BSD中,它通过一个select()系统调用来监控多个文件描述符的数组,当 ...