zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    17岁韩寒在CCTV《对话》舌战群吊的视频
    在线LaTex编辑器
    PowerShell 点滴记录
    程序阅读理解题目(高中语文版,附答案)
    jQuery Validate 应用
    ASP.net MVC 向子视图传递数据
    分库分表(sharding)后主键全局唯一性的解决方案
    Ajax局部刷新例子
    限制 Flash 在指定域名/网址中播放 (Flash 防盗链)
    javascript实现二级联动下拉框
  • 原文地址:https://www.cnblogs.com/youngchaolin/p/10903792.html
Copyright © 2011-2022 走看看