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 WebDriver如何处理右键菜单
WebDriver如何处理右键菜单 一.背景 在学习selenium webdriver的过程中,遇到这样一个问题.ActionChains类中提供了context_click的方法,它可以用来在we ...
- Scrapy库的安装(windows版)
这个是需要安装的所有文件 1. wheel pip install wheel 2. lxml http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml 3. P ...
- [转] React Hot Loader 3 beta 升级指南
前言 在用 react-hot-loader v1.3 的时候有些深层组件不会很完美的热更新(可能是我使用有问题).然后在 react-hot-loader 首页中看到 React Hot Loade ...
- uva 1232
题意: 建筑物在多长的部分是最高的成为该建筑物的覆盖度.求所有建筑物的覆盖度之和. 链接: https://vjudge.net/contest/202699#problem/E 题解: 这道题还是挺 ...
- Java基础总结02:环境变量的配置
(一)Windows系统下配置环境变量 ※在"系统变量"中设置3项属性JAVA_HOME.PATH.CLASSPATH(JDK1.5之后此项属性不必再配),若已存在则点击" ...
- tomcat多端口配置
<?xml version="1.0" encoding="UTF-8"?> <Server port="8005" sh ...
- Scala-Unit4-Scala数组/集合
一.Scala数组 1.数组的定义: 方法一:val arr = new Array[String](3) String代表数据的元素类型.3表示数组的长度 方法二:val arr = Array[I ...
- C语言中的模运算-hdu6124(打表,找规律)
题目链接:https://vjudge.net/problem/HDU-6124 题目描述: 题目大意就是给你一个数,判断这个数 % 其它数后共有几种结果. 这题对我来说最大的难点是我不太知道每个数 ...
- linux文件打包并发送到其他服务器
scp /data/backup/mongodump/mongodb.$DATE.tar root@192.168.1.70:/home/iscsi/mongodb/
- JavaEE 之 Spring(一)
1.Spring a.作用:降低组件与组件之间的关联,便于系统的维护和拓展 b.核心思想: ①IOC:控制反转——配置文件依赖注入 ②AOP:面向切面编程 2.IOC/DI a.建配置文件 <? ...