Hibernate的检索

一,hibernate的检索策略

   1,类级别的检索策略 

    默认 <class>的属性 lazy="ture" 懒加载

   2,属性的检索策略

    <set>的属性

     lazy:懒加载; batch-size: 设定批量检索的数量; fetch: 抓取策略 ,select ,join.subselect. 默认为select 会发送多条sql语句,设置为join时 

      hibernate只发送一条SQL查询语句 此时lazy属性失效。

二,hibernate的检索方式

   1,导航对象图检索方式:即根据已经加载的对象,导航到与其相关的对象上,比如一对多中 1的一方。

   2,按照OID来检索对象,如session.get(**.class,1);

   3,HQL查询,使用面向对象的HQL查询语言。

   4,使用QBC API来检索对象,该API封装了基于字符串的SQL语句

   5,使用 本地数据库SQL语句 检索数据。

   HQL查询

    .创建Query对象

     String hql="from Order o where o.orderName=? And o.customer=? ";

     Query query=session.createQuery(hql);

    .绑定参数

     query.setString(0, "订单A");

     query.setInteger("id", 753664);

     query.setEntity(1, customer);

      可以使用 ? ,命名参数 来传参数,参数也可以为对象

    .执行查询

     List<Order>list=query.list();

    补充: 

      分页查询

       query.setFirstResult((pageNo-1)*pageSize).setMaxResults(pageSize);

    QBC查询,就是通过使用Hibernate提供的query by criteria API 可以实现复杂的sql查询

     .创建criteria对象

      Criteria c=session.createCriteria(Animal.class);

     .设置查询条件

      c.add(Restrictions.eq("name", "动物1"));

     .查询

      List<Animal>list=c.list();

    本地SQL查询

     .编写SQL语句

      String sql="select * from ANIMAL a where a.NAME= :na";

     .创建SQLQuery对象

      SQLQuery sqlq=session.createSQLQuery(sql);

      sqlq.setString("na", "动物1");

     .查询数据

      List<Animal>list=sqlq.list();

原文地址:https://www.cnblogs.com/m01qiuping/p/6390947.html