HQL查询

1:HQL查询特性

   * 支持设定各种查询条件

   * 支持分页查询

   * 支持连接查询

   * 支持分组查询,如group by, having等关键字

   *支持聚集函数,如count()、sum()、max()等

   *支持调用用户自动义SQL函数

   *支持子查询

   *支持动态绑定查询参数

   *支持投影查询,通过检索对象的部分属性来提高查询性能

2: HQL查询例句

   * from Company

   * select c from Company as c

   * List result = session.find("from Company");

   * Query q = session.createQuery("from Company");

      List result = query.list();

   

   * Query q = session.createQuery("from Company where name=?");

      q.setParameter(0, "alibaba");

      List result = q.list();

       //默认情况下,如果不指定传入参数的类型,Hibernate会通过反射机制动态的获得属性参数的类型,也可以通过下面的方式显示的

      //指定参数类型

       q.setParameter(0, "alibaba", Hibernate.STRING);

 

   *命名参数赋值

    Query q = session.createQuery("from Company where name= :name and  creationDate <: creationDate");

    q.setParameter("creationDate ", new Date());

    q.setParameter("name", "alibaba");

    List result = q.list();

 

   *为了实现HQL语句的统一管理,HIbernate提供了命名查询(Named Query)的方式,也就是将HQL放到相应的类映射文件中,例如:

          <query name="Company.byName">

                 <![CDATA[from Company where name= :name]]>

          </query>

在程序中应用:

     Query query = session.getNamedQuery("Company.byName");

     q.setParameter("name", "alibaba");

     List list = q.list();

 

通过上面的介绍,应该对HQL有了一些基本的了解,当调用Session接口或者Query接口执行HQL查询时,Hibernate会完成以下工作:

    * Hibernate在Query调用list或者iterator等接口时,通过相应的Dialect方言提供的不同数据库特性将HQL语句编译为SQL语句

    * 创建JDBC的PreparedStatement实例,并根据参数类型传入对应的查询参数

    * 执行PreparedStament,将得到的ResultSet映射为对应的持久对象,根据不同的映射定义,持久对象的抓取程度会有所不同

 

 

你可能感兴趣的:(HQL查询)