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

posted @ 2019-05-22 20:23  斐波那切  阅读(393)  评论(0编辑  收藏  举报