现在的位置: 首页 > 综合 > 正文

Hibernate的检索方式

2013年09月10日 ⁄ 综合 ⁄ 共 3004字 ⁄ 字号 评论关闭

Hibernate的检索方式

 

1  导航对象图检索方式

根据已经加载的对象,导航到其他对象,例如:对于已经加载的Customer对象,调用它的getOrders().iterator()方法就可以导航到所有相关联的Order对象。

 

2  OID检索方式

按照对象的OID来检索对象。Sessionget()load()方法提供了这种功能。

 

3        HQL检索方式(跨平台检索方式)

Query实例包装了一个HQLHibernate Query Language)查询语句,HQLSQL查询语句有些相似,便HQL查询语句是面向对象的,它引用类名及类的属性名,而不是表名及表的字段名。

Hibernate提供的各种检索方式中,HQL是使用最广的一种检索方式。简单查询用HQL检索方式。主要是用Session.CreateQuery()方法进行查询

         1)属性查询

              Session session=HibernateSessionFactory

                                          .getConfiguration()

                                          .buildSessionFactory()

                                          .openSession();

//查询Customers类中的所有对象

//String hql="from Customers";//查出的对象用

String hql="select c.id,c.name,c.age from Customers c";

 

Query query=session.createQuery(hql);

List list=query.list();

Iterator it=list.iterator();

              while(it.hasNext()){

                     Object[] arr=(Object[])it.next();

                     for(int i=0;i<arr.length;i++){

                            System.out.print(arr[i]+"  ");

                     }

                     System.out.println();

              }

         2)参数查询

              //查询年纪大于25

              String hql="select c.id,c.name,c.age from Customers c where c.age>=?";

              Query query=session.createQuery(hql);

              query.setInteger(0, new Integer(25));

              List list=query.list();

              Iterator it=list.iterator();

              while(it.hasNext()){

                     Object[] arr=(Object[])it.next();

                     for(int i=0;i<arr.length;i++){

                            System.out.print(arr[i]+"  ");

                     }

                     System.out.println();

              }

             

         3)关联查询

              //查询一个客户有几张订单

              String hql="select c.id,c.name,c.age,o.orderNumber from Customers c ,Orders o where c.id=o.customers";

              Query query=session.createQuery(hql);

              List list=query.list();

              Iterator it=list.iterator();

              while(it.hasNext()){

                     Object[] arr=(Object[])it.next();

                     for(int i=0;i<arr.length;i++){

                            System.out.print(arr[i]+"  ");

                     }

                     System.out.println();

              }    

 

4)分页查询

       /**

        * 分页查询

        * @param sql

        *          分页用sql查询语句

        *          类似:select c.id,c.name,c.age from Customers c order by c.id desc

        * @param pageNo

        *          要查询第几页

        * @param pageSize

        *          每一页的大小

        * @return

        *          返回List结果集

        */

       protected List select(String hql,int pageNo,int pageSize){

              List results=null;

              try{

                     Query query=getSession().createQuery(hql);

                     int firstResultIndex=pageSize*(pageNo-1);

                     query.setFirstResult(firstResultIndex);

                     query.setMaxResults(pageSize);

                     results=query.list();

              }catch(RuntimeException ex){

                     throw ex;

              }finally{

                     closeSession();

              }

              return results;

     }

抱歉!评论已关闭.