• Hibernate 之 HQL


     通过对Hibernate框架的学习,已经慢慢的对Hibernate有了进一步的了解,接下来我们要说的是HibernateQusery Language(HQL),如果你正在学习SSH框架,SQL对你来说也是不陌生的,通过学习会发现HQLSQL有很多的相似之处.

    在学习的过程中通过对比找到两个知识点的联系,包括相同点和不同点,通过重点学习那些不同点将会大大减少我们学习的成本.因为HQLSQL有很大的相似处,尤其是语法,所以HQL的学习建立在SQL的基础之上,那对HQL的掌握变非常容易.

     

     

           HQLSQL不同点

          第一点(从宏观的角度)

                  SQL是基于关系型数据库模型,没有面向对象的特点,HQL是面向对象编程跟数据库关系的组合.因为这个不同点即HQL所具有的面向对象的特点.便有了接下来的不同之处.

          第二点(操作内容):

                    SQL更关注存在数据库中的表,并对表的一些操作,HQL更关心对象及其属性的操作.

          第三点(处理的关系):

                    SQL更多处理的是表和表之间的关系,HQL则是处理对象之间的关系.

     

          以上的对比是从一个宏观的角度对他们的对比,接下来我们将会从HQL具体的语法和简单的运用来逐渐掌握了HQL的基本用法.     

     

    •  需要说明的是在hql中关键字是不区分大小写,通常小写但是类的名称和属性名称必须区分大小写,因为面向对象的特征.
      • 例如:fromStudent s where s.id<2fromStudent s where s.ID<2是不一样的.
    •  from子句
      • 例如:HQL"from Student".相当于Sql"select * from Student"从这点可以看出来HQLSQL简洁了一些.
    •  带参数查询(两种查询方式)

    采用?方式,查询学号为1,2的学生

    Liststudents = session.createQuery("select s.id, s.name from Student s wheres.id in(?, ?, ?, ?, ?)")

    .setParameter(0,1)

    .setParameter(1,2)

    .list();

    采用 :参数名方式,查询学号为1,2的学生

    Liststudents = session.createQuery("select s.id, s.name from Student s wheres.id in(:ids)")

    .setParameterList("ids",new Object[]{1, 2})

    .list();

     

    •  查询数量(查询所有学生数目)
      • Long count = (Long)session.createQuery("select count(*) from Student").uniqueResult();
      • 另一种查询方式

    Longcount = (Long)session.createQuery("select count(*) from Student")

                                            .setMaxResults(1)

                                            .uniqueResult();

     

    • HQL中查询原生sql语句
      • List students = session.createSQLQuery("select * from t_student").list();
    • 分页查询

    Liststudents = session.createQuery("from Student")

    .setFirstResult(1)

    .setMaxResults(2)

    .list();

     

    • ……

     

             以上是对HQL的一些基本的介绍,建议在进行Hibernate的过程中可以在Hibernate核心配置文件配上以下属性:

            <propertyname="hibernate.show_sql">true</property>

            这样在程序执行HQL语句时可以看到具体的Sql执行情况.通过查看Sql的执行情况我们也会看到Hibernate存在的一些问题,例如N+1问题.

            希望通过以上的内容能够对HQL有个基本认识,接下来还需要在实践中提高.

     

            HQL的一句话总结为:面向对象的SQL.

     


  • 相关阅读:
    切记ajax中要带上AntiForgeryToken防止CSRF攻击
    研究 Javascript的&&和||的另类用法
    在Javascript中使用String.startsWith和endsWith
    spring mvc的web controller层读不到nacos配置的解决办法
    阿米在日本工作生活趣事(3)
    Python编程从入门到实践(5)学习笔记-用户输入和while
    Python编程从入门到实践(4)学习笔记-if语句,字典
    Python编程从入门到实践(3)学习笔记-列表,切片,元组
    Python编程从入门到实践(2)学习笔记
    【Maven问题】 错误: 程序包xxx 不存在
  • 原文地址:https://www.cnblogs.com/baoendemao/p/3804810.html
Copyright © 2020-2023  润新知