zoukankan      html  css  js  c++  java
  • hibernate框架学习之数据查询(HQL)

    lHibernate共提供5种查询方式

    •OID数据查询方式

    •HQL数据查询方式

    •QBC数据查询方式

    •本地SQL查询方式

    •OGN数据查询方式


    OID数据查询方式

    l前提:已经获取到了对象的OID

    l查询:基于OID,使用get/load方法查询对应的数据

    l作用:使用OID获取对应的数据


    HQL数据查询方式

    l前提:已知要进行查询的数据结构和条件

    l查询:基于Query对象,完成HQL语句的查询,得 到查询结果

    l作用:基于HQL语法规则,查询对应的数据


    QBC数据查询方式

    l前提:已知要进行查询的数据结构和条件

    l查询:基于Criteria对象,完成面向对象的查询,得 到查询结果

    l作用:基于面向对象的规则,查询对应的数据


    本地SQL查询方式

    l前提:已知要进行查询的数据结构和条件

    l查询:基于SQL语句,完成查询,得到查询结果

    l作用:基于SQL语法规则,查询对应的数据


    OGN查询方式

    l前提:已经获取到某个查询对象(PO)

    l查询:使用已检索到的对象(PO),导航到其中包含 的其他数据

    l作用:使用已加载对象,查询其中关联的所有其他 对象数据


    HQL查询方式

    lHQL查询方式是通过HQL语句进行查询

    lHQL(Hibernate Query Language)是一种Hibernate专用的查询语句,基于面向对象的模式,将SQL语句转化成对象的操作格式

    lHQL查询方式步骤

    •获取Session对象

    •编写HQL语句(满足HQL语法规则)

    •初始化Query对象(使用Session对象创建,传入HQL参数)

    •初始化Query参数(如果需要)

    •执行查询返回结果(返回单条数据或集合数据)


    HQL——简单查询

    lHQL书写查询语句时,如果只进行一张表对应的查询,且查询数据为全部数据时,可以使用ORM中的对象名表示表名,查询内容可以省略

    •实际开发中,几乎不存在上述操作,SQL语句的编写需要考虑运行效率,通常会为某些属性添加索引,提高查询性能

    image_thumb[41]


    HQL——链式格式

    lHQL书写时代码很多,可以通过单条语句完成,这就是HQL查询的链式格式

    image_thumb[44]

    l链式格式远远强大于上面的形式,在HQL条件查询和QBC条件查询时更为强大,但是仅仅是一个格式的变化,无需过于关注。


    HQL——获取数据(返回对象)

    l查询内容:单个属性或对象

    l查询结果:0到多条数据

    l使用Query对象提供的list()完成数据的获取,获取后得到一个List集合。List中单条数据封装的是该数据对应的对象,可以是任意类型

    l案例:

    •"from TeacherModel"

    •返回TeacherModel类的对象

    •“select age from StudentModel“

    •返回StudentModel类age属性的对象,该对象类型Integer


    HQL——获取数据(返回对象)

    image_thumb[47]

    image_thumb[48]


    HQL——使用别名

    lHQL书写过程中,如果类名过长,或者属性名过长,可以通过别名的方式简化书写,同时可以描述查询的结果为对象类型

    l别名使用规则与SQL完全相同,as可以省略

    image_thumb[50]

    l“select tm.nick from TeacherModel tm” (正确)


    HQL——获取数据(返回对象数组)

    l查询内容:多个属性或对象

    l查询结果:0到多条数据

    l使用Query对象提供的list()完成数据的获取,获取后得到一个List集合。 List中单条数据封装的对象数组,该数组中按照先后顺序封装了所有查询结果

    l案例:

    •"select teacherName,nick from TeacherModel"

    •返回TeacherModel类的teacherName和nick属性

    •“select skill,age from StudentModel“

    •返回StudentModel类的skill和age和属性

    image_thumb[53]

    l查询的数据内容超过一个,就无法封装成对象,因此封装成了一个对象数组,对象数组中的数据数量取决于查询时要查询的字段/属性数量,其中可以使用对象与属性的格式混用

    image_thumb[56]

    l上述查询中查询的第一个数据是属性,第二个数据是一个对象,这种格式也是被允许的。

    l如果查询的多个数据结果可以包装成一个对象,可以使用投影技术将其进行封装,后面详细解释。


    HQL——获取数据(返回对象)

    l查询内容:不限

    l查询结果:0到1条数据

    l使用Query对象提供的uniqueResult() 完成数据的获取,获取后得到一个对象。与list()的区别是本操作只能用于获取查询结果为0到1条的数据,如果查询结果超过1条,程序将抛出查询结果不唯一异常

    l案例:

    •"from TeacherModel where uuid = 1"

    •返回TeacherModel类的uuid为1的对象,最多一条

    luniqueResult方法通常用于执行查询聚合函数


    HQL——聚合函数的使用规则

    l聚合函数是SQL语言中提供一种快速进行数据统计操作的内置函数

    lHibernate兼容使用SQL语句中的如下聚合函数

    •count()

    •min()

    •max()

    •sum()

    •avg()

    l格式:

    •“select count(uuid) from TeacherModel”

    image_thumb[59]

    lcount函数返回的结果必须使用Long型数据接收

    image_thumb[60]

    l其他函数则要根据具体操作的数据类型进行选择,例如上例中的age需要使用Integer类型接收


    HQL——分页查询

    lHQL查询中分页不再交由用户手工进行,可以使用Query对象提供的方法完成

    •setFirstResult(int);

    •setMaxResults(int);

    l上述两个方法返回值为原始调用对象Query对象,因此支持链式格式

    image_thumb[63]


    HQL——条件查询

    l条件查询是实际应用中最常见的操作,几乎不存在不携带条件,将全表数据查询的现象

    lHQL条件查询分为三种格式

    •无参数条件查询

    •固定参数查询

    •动态参数条件查询


    HQL——索引格式动态绑定参数

    l如果预知传入的参数类型,使用set类型名称()完成参数的传递(常用)

    •查询所有30岁以上的Java编程人员

    image_thumb[65]

    l使用索引格式传参,对应的HQL语句中的参数位置发生变化,设置参数代码仍需维护,不推荐使用。

    l在使用参数设定时,参数只能赋值给指定的查询属性名称,如果参数的属性不是基本数据类型的封装类,此时需要使用实体进行赋值

    •查询编号为1的老师的所有学生

    image_thumb[67]

    l使用对象遍历的格式可以完成上述操作

    l使用传递对象参数的格式完成

    •查询编号为1的老师的所有学生

    image_thumb[69]

    setEntity方法可以完成对象参数的传递

    setEntity方法要求传入的参数必须是PO或DO


    HQL——名称格式动态绑定参数

    l使用索引的格式匹配参数不够灵活,维护难度高,HQL还支持定义临时的变量名称指定参数(推荐使用)

    image_thumb[71]

    l使用名称与索引都可以完成对应的功能,传递参数时三种参数赋值格式都适用(param,类型,实体)


    HQL——条件查询(链式风格)

    l条件查询支持链式风格

    image_thumb[73]

    lQuery对象的操作如果返回结果为Query类型,那么该操作就支持链式风格书写


    HQL——投影模式查询

    l普通查询设置查询内容

    •查询单个属性或者对象,则返回对象集合

    •查询多个属性或对象的组合格式,返回对象数组

    l获取所有学生的姓名和年龄

    image_thumb[75]

    l投影查询的作用是可以将查询的数据进行封装

    •将查询结果封装成对象

    •将查询结果封装成集合

    l利用构造方法将查询结果封装成对象

    •要求对应的PO类中提供对应的构造方法

    image_thumb[77]

    •可以为PO类提供各式各样的构造方法,适应各种各样的投影

    •投影格式较灵活,前提是定义多种构造方法(无参构造方法)


    HQL——多表关联查询

    image_thumb[80]

  • 相关阅读:
    K8S入门学习
    CentOs7安装docker(第二篇)
    使用NFS时的一些问题
    linux的一些基本命令
    centOS7搭建NFS服务器
    ELK日志系统+x-pack安全验证
    如何在网页中用echarts图表插件做出静态呈现效果
    3.29——工作日志
    导航选中,背景变色效果
    网站滚动n个像素后,头部固定
  • 原文地址:https://www.cnblogs.com/xyhero/p/9351647.html
Copyright © 2011-2022 走看看