zoukankan      html  css  js  c++  java
  • HQL查询

    --------------------siwuxie095

       

       

       

       

       

       

       

    HQL 查询

       

       

    1、HQL,即 Hibernate Query Language,它是 Hibernate 提供

    的一种查询语言

       

       

       

    2、HQL 和 SQL 很相似,区别在于:

       

    1HQL 操作的是实体类属性

       

    2SQL 操作的是和表中字段

       

       

       

    3、常用的 hql 语句

       

    (1)基本查询: from 实体类名

       

    (2)条件查询: from 实体类名 where 属性名 = ?

       

    (3)排序查询: from 实体类名 order by 属性名 asc/desc

       

       

       

    4、使用 Query 对象实现 HQL 查询

       

    1)创建 Query 对象,写 hql 语句

       

    2)调用 Query 对象的方法得到结果

       

       

       

       

       

    基本查询

       

       

    以客户和联系人为例(一对多),下同

       

       

    1、查询所有记录

       

    1)创建 Query 对象,写 hql 语句

       

    2)调用 Query 对象的方法得到结果

       

       

       

    2、查询所有的 hql 语句写法:from 实体类名

       

       

       

    3、具体实现

       

       

       

    /*

    * (1) 创建 Query 对象

    *

    * 调用 session createQuery() 方法,参数是 hql

    * 语句,返回值是 Query 类型,创建以接收

    */

    Query query=session.createQuery("from Customer");

    /*

    * (2) 调用方法得到结果

    *

    * 调用 query list() 方法,返回值是 List 类型,

    * 创建以接收

    */

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

       

       

       

       

       

    条件查询

       

       

    1、条件查询的 hql 语句写法

       

    (1)from 实体类名 where 属性名=? and 属性名=?

       

    2from 实体类名 where 属性名 like ?

       

       

       

    2、具体实现

       

    1)多条件查询

       

       

       

       

       

    /*

    * (1) 创建 Query 对象

    *

    * 调用 session createQuery() 方法,参数是 hql

    * 语句,返回值是 Query 类型,创建以接收

    *

    * hql 语句也可写作(as 可以省略):

    * from Customer as c where c.cid=? and c.custName=?

    */

    Query query=session.createQuery("from Customer where cid=? and custName=?");

    /*

    * (2) 设置条件

    *

    * 向占位符 ? 中设置值

    *

    * 调用 query setParameter() 方法

    *

    * JDBC 不同,这里的参数位置从 0 开始

    */

    query.setParameter(0, 1);

    query.setParameter(1, "百度");

    /*

    * (3) 调用方法得到结果

    *

    * 调用 query list() 方法,返回值是 List 类型,

    * 创建以接收

    */

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

       

       

    2)模糊查询

       

       

       

       

       

    /*

    * (1) 创建 Query 对象

    *

    * 调用 session createQuery() 方法,参数是 hql

    * 语句,返回值是 Query 类型,创建以接收

    *

    * hql 语句也可写作(as 可以省略):

    * from Customer as c where c.custName like ?

    */

    Query query=session.createQuery("from Customer where custName like ?");

    /*

    * (2) 设置条件

    *

    * 向占位符 ? 中设置值

    *

    * 调用 query setParameter() 方法

    *

    * JDBC 不同,这里的参数位置从 0 开始

    */

    query.setParameter(0, "%%");

    /*

    * (3) 调用方法得到结果

    *

    * 调用 query list() 方法,返回值是 List 类型,

    * 创建以接收

    */

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

       

       

       

       

       

    排序查询

       

       

    1、排序查询的 hql 语句写法

       

    from 实体类名 order by 属性名 asc/desc

       

       

       

    2、具体实现

       

       

       

    /*

    * (1) 创建 Query 对象

    *

    * 调用 session createQuery() 方法,参数是 hql

    * 语句,返回值是 Query 类型,创建以接收

    */

    Query query=session.createQuery("from Customer order by cid asc");

    /*

    * (2) 调用方法得到结果

    *

    * 调用 query list() 方法,返回值是 List 类型,

    * 创建以接收

    */

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

       

       

       

       

       

    分页查询

       

       

    1、MySQL 实现分页查询

       

    sql 语句中使用 limit 关键字

       

    如:select * from t_customer limit 1,3

       

       

       

    2、HQL 实现分页查询

       

    1)在 hql 语句中不能写 limit

       

    2)Hibernate 的 Query 对象中封装了两个方法可以实现分页操作

       

       

       

    3、具体实现

       

       

       

       

       

    /*

    * (1) 创建 Query 对象

    *

    * 调用 session createQuery() 方法,参数是 hql

    * 语句,返回值是 Query 类型,创建以接收

    */

    Query query=session.createQuery("from Customer");

    /*

    * (2) 设置分页数据

    *

    * 开始位置和每页的记录数

    */

    query.setFirstResult(0);

    query.setMaxResults(10);

    /*

    * (3) 调用方法得到结果

    *

    * 调用 query list() 方法,返回值是 List 类型,

    * 创建以接收

    */

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

       

       

       

       

       

    投影查询

       

       

    1、投影查询:查询部分字段的值,而不是所有字段的值

       

       

       

    2、投影查询的 hql 语句写法

       

    select 属性名1, 属性名2 from 实体类名

       

    注意:select 后面不能写 *,即 不支持

       

       

       

    3、具体实现

       

       

       

    /*

    * (1) 创建 Query 对象

    *

    * 调用 session createQuery() 方法,参数是 hql

    * 语句,返回值是 Query 类型,创建以接收

    */

    Query query=session.createQuery("select custName from Customer");

    /*

    * (2) 调用方法得到结果

    *

    * 调用 query list() 方法,返回值是 List 类型,

    * 创建以接收

    */

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

       

       

       

       

       

    统计查询

       

       

    1、常用的聚集函数:countsumavgmaxmin

       

       

       

    2、统计查询的 hql 语句写法

       

    select 聚集函数(*) from 实体类名

       

       

       

    3、具体实现

       

       

       

       

    /*

    * (1) 创建 Query 对象

    *

    * 调用 session createQuery() 方法,参数是 hql

    * 语句,返回值是 Query 类型,创建以接收

    */

    Query query=session.createQuery("select count(*) from Customer");

    /*

    * (2) 调用方法得到结果

    *

    * 调用 query uniqueResult() 方法,返回值是 Object 类型,

    * 创建以接收

    */

    Object obj=query.uniqueResult();

    /*

    * 注意:不能直接把 obj 转成 int 类型,需要先转成 Long 类型

    *

    * Long val=(Long) obj;

    * int valx=val.intValue();

    */

       

       

       

       

       

       

       

       

       

    【made by siwuxie095】

  • 相关阅读:
    [LeetCode]题解(python):086
    [LeetCode]题解(python):083
    [LeetCode]题解(python):082
    两位图灵奖得主万字长文:新计算机架构,黄金十年爆发!——读后感
    《架构漫谈》阅读笔记三
    以《淘宝网》为例,描绘质量属性的六个常见属性场景
    周学习笔记(01)——大三下
    Anconda、Pycharm下载、安装、配置教程(极其详细)
    《架构漫谈》阅读笔记二
    《架构漫谈》阅读笔记一
  • 原文地址:https://www.cnblogs.com/siwuxie095/p/7300287.html
Copyright © 2011-2022 走看看