• SSH学习-Hibernate的HQL语言


    Hibernate下的HQL(Hibernate Query Language)语言是一种类SQL语言,在Hibernate框架下,HQL语言结合自己API,可以实现对数据库的操作,本文简单的记录下HQL语言的简单用法,后续在工作和学习的过程中再补充。

    HQL与SQL的区别

    两者的语法不一样,SQL是操作的数据库,而HQL语言是一种类SQL语句,它语法跟SQL很相似,但是不能操作数据库,也只能用部分SQL的关键字。

    SQL语法:SELECT 字段名 FROM 表名

    HQL语法:SELECT 属性名 FROM 类名(不能使用SELECT * FROM 类名)

    HQL常用的语法:

    (1)FROM 类名,但是不支持SELECT *

    (2)SELECT 属性 FROM 类名

    可以使用HAVING,ORDER BY和GROUP BY等关键字。

    如何使用HQL

    使用HQL需要按照如下步骤来进行:

    (1)获取session对象

    (2)编写HQL语句

    (3)创建Query查询对象,将HQL语句添加进去

    (4)如果HQL中有查询参数,再使用setXxx设置查询参数

    (5)调用Query对象的list方法得到查询结果,大牛建议不直接用list,使用Query对象的uniqueResult方法。

    (6)关闭session

    其中HQL语句关键字不区分大小写,但是实体类名和属性名区分大小写

    HQL使用案例

    测试时省略Hibernate的配置,可以参考以前自己写的博客即可,下面直接下测试类中进行测试。

    (1)使用HQL语句从student表中查找数据,查询无参数

          //测试使用HQL语句从student表中查询数据,查询条件无参数
          @Test
          public void testHQL() {
              //获取session对象
              Session session=getSession();
              //编写HQL语句
              String hql="from Student";//from 类名
              //创建Query对象,创建查询,并返回query结果
              Query query=session.createQuery(hql);
              //调用Query对象的list方法返回查询结果集
              List<Student> students=query.list();
              for(Student s:students) {
                  System.out.println(s);
              }
              //关闭session对象
              session.close();
          }

    测试结果:

    可以看出查询出了student表中的所有数据。

    (2)使用HQL语句从student表中查找数据,查询时有参数,参数名前面需加冒号,为引用占位符。

          //测试使用HQL语句从student表中查询数据,采用name进行查询
          @Test
          public void testHQL1() {
              //获取session对象
              Session session=getSession();
              //编写HQL语句
              String hql="from Student where name=:name";
              //创建Query对象
              Query query=session.createQuery(hql);
              //设置查询参数
              query.setString("name", "messi");
              //调用Query对象的list方法返回结果集
              List<Student> students=query.list();
              for(Student s:students) {
                  System.out.println(s);
              }
              //关闭session
              session.close();
          }

    测试结果:

    测试查询name为'messi'的一条记录,发现可以正常查询得到。

    (3)测试使用HQL语句从student表中查询数据,并按照id倒序排列,主要是测试ORDER BY关键字。

          //测试使用HQL语句从student表中查询数据,并按照id倒序排列
          @Test
          public void testHQL2() {
              //获取session对象
              Session session=getSession();
              //编写HQL语句
              String hql="from Student order by id desc";
              //创建Query对象
              Query query=session.createQuery(hql);
              //调用Query对象的list方法返回结果集
              List<Student> students=query.list();
              for(Student s:students) {
                  System.out.println(s);
              }
              //关闭session
              session.close();          
          }

    测试结果:

    测试结果都是按照id倒序排列,因此ORDER BY关键字也是可以正常使用。

    限于时间,其他更复杂的查询这里不深究了,如果以后工作上有需要再深入了解,待添加。

    结论

    HQL是Hibernate下的类SQL查询语句,其不直接查询数据库中的表,而是通过查询跟表有映射关系的实体类,来实现查询需求。

    参考博文:https://www.cnblogs.com/caoyc/p/5606444.html

  • 相关阅读:
    泊松盘采样(Poisson Disk Sampling)生成均匀随机点
    JSON神器之jq使用指南指北
    SSH(sshd)终极安全加固指南
    rocketmq 搭建配置
    SQL 片段: select top 100
    安装netframework4.8 或 .net 4.6.2 时 弹出“已处理证书链,但是在不受信任提供程序信任的根证书中终止”错误的解决方法
    win7 离线安装 vs2019 出现闪退解决办法(非常实用)
    在win7 上安装 Visual Studio 2019 步骤 及 vs2019离线安装包
    VMware 宿主机与虚拟机之间 共享剪切板 失效问题
    安装netframework4.8弹出“已处理证书链,但是在不受信任提供程序信任的根证书中终止”错误的解决方法
  • 原文地址:https://www.cnblogs.com/youngchaolin/p/10903792.html
Copyright © 2020-2023  润新知