HQL数据查询

HQL定义:Hibernate Query Language。是Hibernate框架提供的一种查询语言。HQL是面向对象的查询语言,其查询的主体是映射配置的持久化类及其属性。(:SQL不是面向对象的查询语言,其主体是数据库表及表的字段)
实际上,hibernate框架会将编写好的HQL语句解析成相应的sql语句来完成最终的数据库查询操作。
HQL查询丰富灵活,是hibernate官方推荐的查询方式。


HQL语句形式:

  • select:指定查询结果中的对象和属性,并指定以何种数据类型返回。其位置在HQL语句结果中最前面。
  • from(不可或缺):指定HQL语句查询目标(即映射配置的持久化类及其属性)
  • where:逻辑表达式,设置查询的条件,限制返回的查询结果和范围
  • group by:分组查询子句
  • having:对分组进行条件限制设置
  • order by:指定查询结果中的实例对象的排序

注意的问题:
1、HQL是面向对象的查询语言,查询主体是持久化类及其属性,对Java类名与属性名大小写敏感。(sql查询主体是数据库表及其字段,大小写不敏感)
2、HQL对关键字不区分大小写(习惯小写)。


Query接口: org.hibernate.Query接口。
1、在Query中定义有执行查询的方法,该方法完成对HQL语句的解析和执行过程,并返回查询的结果。(如同JDBC接口解析sql语句)
过程: Hibernate框架解析HQL查询语句,根据映射配置信息,把HQL查询语句解析成相应的SQL语句来执行数据库的查询操作,此过程依靠的就是Query接口
2、Query接口支持方法链的编程风格,使得程序代码更简洁。在Query接口中,使用方法链编程最多的场景是查询参数的动态设置,特别是多个参数的设置。
方法链编程:就是调用方法后,返回的方法结果还是调用方法的这个对象,可以在调用方法后直接调用该对象的其他方法。这样用一条程序语句来完成多个方法的调用和执行。

Query实例的创建:

通过Session接口的createQuery()方法创建Query实例对象。同时createQuery()方法包含一个HQL查询语句参数,createQuery(hql)
创建好一个包含HQL查询语句的Query实例对象之后,执行查询。

Query执行查询:

Query接口的list()方法执行HQL查询,这个方法会解析Query对象传入的hql语句。list()方法在HQL查询完成之后返回结果数据类型为java.util.List,List集合中存放符合查询条件的持久化对象。


例:在数据库创建表seller,创建映射配置文件Seller.hbm.xml,创建工具类HibernateSessionFactory。
测试类SellerTest:

package com.model;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.util.HibernateSessionFactory;

public class SellerTest {
    private Session session=null; 

    @Test
    public void testSeller(){
        //编写执行查询的HQL语句
        String hql="from Seller";

        //创建Query实例对象
        Query query =session.createQuery(hql);//参数是编写的hql语句

        //调用Query实例对象的list方法来执行HQL查询,这个方法会解析Query对象传入的hql语句
        List<Seller> sellers=query.list();  //查询结果是List集合
        for (Seller seller : sellers) {
        //toString()在工具类中进行了重写,用于测试
            System.out.println(seller.toString());
        }
    }

    @Before
    public void setUp() throws Exception{
        session=HibernateSessionFactory.getCurrentSession();
    }

    @After
    public void teardown() throws Exception{
        session.close();
    }

}

Junit单元测试,控制台:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值