【基于SSH框架的企业级应用开发】HQL实用技术

HQL语句是面向对象的查询语言。

   例如:from Emp s where s.empno='7788' order by s.empno  ;注意点:语句中所有的变量都是和实体类对应,Emp是类名,empno是类中的属性名。

2.执行HQL,并返回结果。关键代码如下:

    String hql = "from Emp order by ename"; // 定义hql语句

    Query query = session.createQuery(hql); // 通过Query接口查询hql

    List<Emp> list = query.list(); // 获取查询结果,返回值为包含Emp类的List类型。list的大小就是查询出来的行数,取出来的每个Emp是某一列数据。

3.获取查询结果有两个方式:一个是List<Emp> list = query.list();  另一个为Iterator<Emp> iter = query.iterate();

4.参数的绑定,按参数位置绑定。两个点:一个是使用“?”作为占位符,另一个是通过int类型的下标为参数赋值。关键代码如下:

    String hql = " from Emp  where empno = ?  and ename = ?   ";  // 使用“?”作为占位符

    Query query  = session.createQuery(hql);

    query.setInteger(0, 7788); // 通过下标为参数赋值

    query.setString(1, "SCOTT")

5.参数的绑定,按照参数名称绑定。两个点:一个是使用":参数名"的方式作为占位符,另一个是通过参数名为参数赋值,关键代码如下:

    String hql = " from Emp  where empno = :myemp  and ename = :myename   ";  // 使用“:参数名”作为占位符

    Query query  = session.createQuery(hql);

    query.setInteger("myemp", 7788); // 通过参数名为参数赋值

    query.setString("myename", "SCOTT");

  1. 绑定参数类型。绑定任意参数类型代码:
  • query.setParameter(arg0, arg1);
  • query.setString(arg0, arg1);
  • query.setDoulbe(arg0, arg1);
  • query.setDate(arg0, arg1);
  • query.setInteger(arg0, arg1);

7.setProperties() 绑定命名参数和一个对象中的属性值。

  Emp qemp  = new Emp();

qemp.setEmpno(7788);

qemp.setEname("SCOTT");

// 要点:一必须使用参数名称的方式作为占位符。二自定义的参数名称需要和Emp中的属性名保持一致。

String hql = " select  new Emp(empno,job) " +

"from Emp  where empno = :empno and ename= :ename   ";

Query query  = session.createQuery(hql);

query.setProperties(qemp);

8.分页。分页的三个要素:1.记录总数。2.每页的记录数。3.需要查询的页数。

        hibernate提供了两个方法来进行分页:

        query.setMaxResults(pageSize); // 设置每页行数,相当于设置行数的最大值

query.setFirstResult((pageIndex-1) * pageSize); // 设置从第几条数据开始查询,不包括本条数据

9.投影。投影即为有针对性的从数据库中查询某几列数据。作用和优点:提高查询效率,只返回我们需要的列。

String hql = " select  empno,ename from Emp   "; // 表示只查询empno 和ename两列。

// 通过投影的方式查询,可以吧<>中间的对象,想象为一行列数据,只要拿到<>中间的数据类型就可以输出各个列数据

// list的大小对应的是查询出来的行数

List<Object[]> list = query.list(); // 如果只查询一列则是Object,多列则为Object[]

System.out.println("这里是查询出来的行数:"+list.size());

for(Object[] obj: list){

System.out.println("这是是每行的列数:"+obj.length); // object[]的长度就是hql语句中查询的列的个数

System.out.println(obj[0]);

System.out.println(obj[1]);

}

  1. 投影。将查询结果通过构造函数封装为实体类。要点:1.实体类要有相应的构造函数,和无参的构造函数。2.hql语句中通过 new 来封装实体类String hql = " select  new Emp(empno,ename) from Emp   "; 

List<Emp> list = query.list();

本章总结

  • HQL是面向对象的查询语句,在Hibernate提供的各种查询方式中,HQL是使用最广的一种查询方式
  • 执行HQL语句需要使用Query接口,query也是Hibernate的核心接口之一,执行HQL的两种常用的方法是list()方法和iterate方法
  • HQL语句中绑定参数的形式有两种,按参数位置和按参数名称绑定
  • HQL支持投影查询,灵活的参数查询,分页查询等功能
  • 可以使用myeclipse反向工程生成持久化类和映射文件

 

 

 

 

 

---------------------

作者:qiuheyi

来源:CSDN

原文:https://blog.csdn.net/qiuheyi/article/details/52043515

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值