1. 程式人生 > >HQL-Query查詢中的佔位符處理到動態分頁查詢

HQL-Query查詢中的佔位符處理到動態分頁查詢

//查詢語句:採用別名(:ename)代替(?),set時不再使用位置引數下標,而是命名引數別名來賦值。

    public void queryDept(){
        session=HibernateUtil.getSession();
        sql="from Dept where deptName=:deptname";
        Query query=session.createQuery(sql);
        query.setString("deptname", "SALES");
        List<Dept> dlist=query.list
(); for(Dept d:dlist){ System.out.println(d.getDeptName()); } HibernateUtil.closeSession(); }

//採用setParameter()方法進一步簡化佔位符賦值

query.setParameter("deptname", "SALES");

//批量新增引數:採用條件類setProperties()方法進一步簡化佔位符賦值,可以實現動態組合查詢。

1.  建立一個條件類,把命名引數別名作為類的私有屬性;
2.  新增一個全體屬性的建構函式;
3.
setPropertiest(obj); public void queryDept() { session = HibernateUtil.getSession(); sql = "from Dept where deptName=:deptName"; String deptName = "SALES"; DeptCondition dc = new DeptCondition(deptName); Query query = session.createQuery(sql); query.setProperties
(dc); List<Dept> dlist = query.list(); for (Dept d : dlist) { System.out.println(d.getDeptNo()); } HibernateUtil.closeSession(); }

動態查詢
//動態查詢

public void qdept(){
        DeptCondition dc=new DeptCondition();
        dc.setDeptNo(new Byte("20"));
        session = HibernateUtil.getSession();
        StringBuffer sb = new StringBuffer("from Dept where 1=1");

//動態條件新增,一個查詢語句完成大多數查詢任務

        if(dc.getDeptNo()>0){
            sb.append("and deptNo>:deptNo");
        }
        sql=sb.toString();
        Query query=session.createQuery(sql);
        query.setProperties(dc);
        List<Dept> dlist=query.list();
        for(Dept d:dlist){

            System.out.println(d.getDeptName());
        }

    }

//HQL中分頁查詢的實現

Query query=session.createQuery(sql);
        query.setProperties(dc);
        query.setFirstResult(0);
        query.setMaxResults(2);
        List<Dept> dlist=query.list();
//統計記錄數
    public void countDept(){
        session=HibernateUtil.getSession();
        sql="select count(*) from Dept";
        Query query=session.createQuery(sql);
        int num=((Long)query.uniqueResult()).intValue();
        System.out.println(num);
        session.close();
    }

//查詢一列

    public void qOneDept(){
        session=HibernateUtil.getSession();
        sql="select deptNo from Dept";
        Query query=session.createQuery(sql);
        List<Byte> objArr= query.list();
        for(Byte b:objArr){
            System.out.println(b);
        }
        HibernateUtil.closeSession();       
    }

//查詢部分列—投影查詢(List

    public void qSomeDept(){
        session=HibernateUtil.getSession();
        sql="select deptNo,deptName from Dept";
        Query query=session.createQuery(sql);
        List<Object[]> objArr= query.list();
        for(Object[] obj:objArr){
            System.out.println(obj[0]+","+obj[1]);
        }
        HibernateUtil.closeSession();       
    }
    //通過迭代器查詢
    public void qDeptByIt(){

        session=HibernateUtil.getSession();
        sql="from Dept";
        Query query=session.createQuery(sql);
         Iterator<Dept> it=  query.iterate();
        while(it.hasNext()){
            Dept d=it.next();
            System.out.println(d.getDeptName());
        }
        HibernateUtil.closeSession();   
    }

 HQL(Hibernate Query Language)是面向物件的查詢語句
 執行HQL語句可以採用兩種方式:
 list()方法
 iterator()方法
 HQL語句中繫結引數的形式有兩種:
 按引數位置繫結
 按引數名字繫結
 HQL支援投影查詢、引數查詢、分頁查詢等功能。