Hibernate的检索方式

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;

     }

 

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

              List list=hb.select(hql, 2, 4);

              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();

            }

 

5)统计函数查询

              Session session=HibernateSessionFactory

                                          .getConfiguration()

                                          .buildSessionFactory()

                                          .openSession();

              String hql="select count(c) from Customers c";

              Query query=session.createQuery(hql);

              Integer count=(Integer)query.uniqueResult();

              System.out.print("共有: "+count+"条数据!" );

             

              hql="select avg(c.age) from Customers c";

              query=session.createQuery(hql);

              Float avgage=(Float)query.uniqueResult();

     System.out.print("平均年纪: "+avgage+"!" );

 

4        QBC检索方式(跨平台检索方式)

Criteria接口完全封装了基于字符串形式的查询语句,比Query接口更加面向对象。Criteria接口擅长于执行动态查询。主要是用Session.CreateCriteria()方法进行查询.

复杂查询用QBC检索方式。QBC检索方式主要由Criteria接口、Criterion接口和ExpressionRestrictions类组成。

        //查询Customers

        //List list=hb.select(Customers.class,new Customers());

        Customers customer=new Customers();

        customer.setAge(new Integer(25));//查询年纪大于25岁的

        Criterion criterion=Restrictions.ge("age", customer.getAge());

        List list=hb.select(Customers.class,criterion);

        Iterator it=list.iterator();

        while(it.hasNext()){

            Customers cus=(Customers)it.next();

            System.out.println(cus.getId()+"/t"+cus.getName()+"/t"+cus.getAge());

      }

 

动态查询

        Customers customer=new Customers();

        customer.setAge(25);

        //select()方法会根据customer中设定的参数自动拼装SQL语句。完成动查询!

        List list=hb.select(customer.getClass(), customer);

       

        Iterator it=list.iterator();

        while(it.hasNext()){

            Customers cus=(Customers)it.next();

            System.out.println(cus.getId()+"/t"+cus.getName()+"/t"+cus.getAge());

      }

 

5        SQL检索方式

主要是用Session.CreateSQLQuery()方法进行查询

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值