Query和hql语句概念篇

首先大家考虑一个问题:

我们之前所用的session.get() 和 session.load()是通过主键的id来进行查询,但是如果想换一种方式比如说通过用户名来进行查询用户密码等等用这两种方式就做不到。必须用到Query接口或者Criteria接口(这个使用较少,就不介绍,重点学习Query),来完成这些复杂的查询任务。关于使用Session类中的方法如何做到增删改查,博主有一篇博客:https://blog.csdn.net/My_name_is_ZwZ/article/details/82843799

hql语句(即hibernate query language  可以理解成是hibernate中的sql语句):
            它是面向对象的查询语句,所以说返回的就是对象。之所以能够做到这一点是因为封装了很多方法,其反射机制帮我们完成了这个任务

 为什么要学习hql?
        这个是官方推荐的,功能强大。
          ?之前使用session删除时:session.delete(对象) -->但是如果是想把年龄小于20岁的用户删除等等这种批量删除的“骚操作”的话,显然使用这种方法是不合适的
          ?之前使用session添加:session.save(对象)
        ?之前使用session修改:session.update(对象) -->如果是批量修改,例如:把工资低于20万的全部提高1万,显然这种方法也是不方便的
          ?之前使用session查询:session.get() 和session.load()它们都是根据主键来找。但是如果查询的时候不根据主键来找的话,这两种方法就会显得无能为力

         所以hql语句的出现也是为了更好的满足对于各种情况下的增删改查的需求。

Query接口

Query接口类型的对象可以对数据库进行操作,它可以使用hql,qbc,和原生的sql对数据库进行操作。官方推荐使用的是hql语句

 如何得到Query的对象?
                Query query = session.createQuery("from User where username='zhangwenzhe'");//其中User不是表名,而是pojo中 的类名。后面的username是类中的属性名

关于hql语句的一些重点知识点:
        1)它是面向对象的查询语言
        2)与sql不同的是它区分大小写
        3)hql中查询的是对象而不是一张表
        4)hql主要通过Query来进行一系列操作
        5)Query的创建方式:Query query = session.createQuery(hql);

    【注】hibernate强烈建议: 每一张表都要有一个主键对这一行数据进行唯一标识并且这个主键还是不含业务逻辑的主键(也就是说,这个主键中的内容除了一个简单的标识的作用,在应用程序中起不上其他的作用。这样子的好处就是如果主键的信息不含业务逻辑的话,就没有修改 它的理由,这样子的话它就会变得很稳定。因为一张表如果主键要修改的话,可能是伤筋动骨的事情)

 

 

 

你可能感兴趣的:(Hibernate框架)