【SSH】hibernate之hql学习

本文介绍了HQL(Hibernate Query Language)的基本概念及其与SQL的区别,并通过具体示例详细讲解了HQL在实体查询和属性查询方面的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     在敲SSH过程中,对于Dao层的查询方法接触了“hql查询”、“离线查询”和“命名查询”,对数据库持久化操作使用更多的是hql方式查询,现对其总结。

一、Hql是什么?

      Hql全名Hibernate Query Language,显然它是一种查询语言。一个ORM框架是建立在面向对象的基础上的。虽然HQL的语法类似于SQL,但实际上它的查询目标是对象。HQL拥有面向对象语言的所有的特性,这其中包括多态、继承和组合。这就相当于一个面向对象的SQL。

二、hqlsql的比较

     HQL在结构上更接近SQL语句查询语法;

     [select/delete/update…][from…][where…][groupby…][having…][order by…]

     sql ---面向数据库表查询

     hql ----面向对象查询

     hql from后面跟的类名+类对象 where对象的属性做条件

     sql from后面跟的是表名 where用表中字段做条件

三、Hql的用法

(1)实体查询

        因为hql面向兑现查询,实体查询则是将相关实体的所有属性进行查询

   //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段   
        String hql = "from Users";   
        Query query = session.createQuery(hql);   
            
        List<Users> users = query.list();   
        for(Users user : users){   
            System.out.println(user.getName() + " : " + user.getPasswd() + " : " + user.getId());   
        }   
   
    //输出结果为:   
    //name1 : password1 : 1 
    //name2 : password2 : 2 
    //name3 : password3 : 3 
        一句:hql="from User",表示通过映射之后,将User这个实体整个查询出来。

(2)属性查询

    //查询其中几个字段   
        String hql = " select name,passwd from Users";   
        Query query = session.createQuery(hql);   
        //默认查询出来的list里存放的是一个Object数组   
        List<Object[]> list = query.list();   
        for(Object[] object : list){   
            String name = (String)object[0];   
            String passwd = (String)object[1];   
                
            System.out.println(name + " : " + passwd);   
        }   
    //输出结果为:   
    //name1 : password1   
    //name2 : password2   
    //name3 : password3  
           通过加入"select  name,password from Users"可知,此时返回出来的则是User这个实体当中的两个对象,name对象和password对象。             

四、小结

      上述例子中仅仅针对hql的查询从最简单的两个方面(实体查询和属性查询)来说明,其实hql的使用很深,会在对于hibernate深入学习过程中给出总结。但HQL还有一点需要注意一下:

  HQL并不区分字母的大小写,但在HQL中的Java类和属性名必须和实际的类和属性名一致。如SELECT和select之间可以互换,但User和user却代表不同的含义。

      示例:

 String hql = "from Users";  
 String hql = "FrOm user";
这两句代表从不同的实体中进行查询。


  


评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值