HQL实用技术(一)

Hibernate支持的查询方式

HQL查询
Criteria查询
原生SQL(Native SQL)查询
HQL是一种面向对象的查询语言,其中没有和字段的概念,只有类,对象和属性的概念。

执行HQL语句的步骤

1.获取Session对象
2.编写HQL语句
3.创建Query对象
4.执行查询,得到查询结果
执行HQL语句
返回list集合

String hql = "from Emp";
Query query = session.createQuery( hql );
List<Emp> empList = query.list();

iterate()方法:
返回iterate迭代器

String hql = "from Emp";
Query query = session.createQuery( hql );
Iterator<Emp> empIterator = query.iterate();

uniqueResult()方法:
返回唯一一条结果

String hql = "select count(id) from Emp";
Query query = session.createQuery( hql );
Long count=(Long) query.uniqueResult()

在HQL查询语句中绑定参数

使用字符串拼接查询条件存在各种弊端

“from User where name = '” + name + “’”
性能低
不安全

使用占位符
1.按参数位置绑定

//下标从0开始
from User where name = ?

2.按参数名称绑定

//可读性好,易维护,推荐使用
from User where name = :name

为参数赋值

setXXX():
针对具体数据类型
setXXX( int position, XXX value) //针对使用按参数位置绑定的方法
setXXX( String name, XXX value) //针对使用按参数名称绑定的方法

setParameter():
任意类型参数
setParameter( int position, Object value)//针对使用按参数位置绑定的方法
setParameter( String name, Object value)//针对使用按参数名称绑定的方法

setProperties():
专为命名参数定制

实现动态查询

注意:命名参数名一定要和参数封装对象的属性名一致

分页查

Query接口的相关方法
uniqueResult() :获取唯一对象
setFirstResult() :设置从第几条开始
setMaxResults():设置读取最大记录数

 public List<House> getByPage(int pageNo,int pageSize){
        return HibernateUtil.getSession().createQuery("from House order by id")
                .setFirstResult((pageNo-1)*pageSize)//设置获取结果的起始下标
                .setMaxResults(pageSize)//最大返回结果值
                .list();
    }

投影

1.HQL投影查询是查询一个持久化类的一个或多个属性值,或者是通过表达式或聚合函数得到的值
2.投影查询需要使用HQL的select子句
3.查询结果的封装主要分三种情况
封装成Object对象
封装成Object数组
通过构造方法封装成对象
对象不是持久化状态,仅用于封装结果

经验:若查询结果仅用于展示,不需要保持持久化状态,应尽量使用投影查询以减少开销,提高效率
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值