Hibernate中HQL語句寫法


 

最開始項目中HQL語句寫的比較隨意,后來看了下Hibernate 中Query和Criteria API,和sql語句的編譯過程 。了解到查詢條件不要直接使用字符串拼接,可以大大提高sql語句執行效率,代碼也更加規范安全。

1,hql中可以用"?"來占位,在使用query時,必須將"?"及其索引位置和字段名對應上(很容易出錯;不利於維護;)

2,hql另外一種方式占位:命名參數;

使用命名參數;冒號+字段名(或別名);等於給原來的"?"起了個名字;
String hql = "from User as user where user.name=:name";
//....
query.setString ("name", name); // 此處第一個參數必須和hql中參數命名一致;

 

query 的基本寫法:

  使用“=:xx” 標識變量

  setString("xx", ....)   插入對應的搜索條件

 

public String DocSerialNo(String perType, String organId) {
        String updateHql = "update LicenceSerialNo set curnum=curnum+1 where curareaid=:organId and areaid=:perType";    
        Query qr=this.getSession().createQuery(updateHql);
        qr.setString("organId", organId);
        qr.setString("perType", perType);
        int i=qr.executeUpdate();
        if(i<1)return null;
        String findSerialHql="from LicenceSerialNo  where curareaid=:organId and areaid=:perType";
        Query findQr=this.getSession().createQuery(findSerialHql);
        findQr.setString("organId", organId);
        findQr.setString("perType", perType);
        LicenceSerialNo licSerial=(LicenceSerialNo) findQr.list().get(0);    
        String licNo=licSerial.getLicencetype()+new DecimalFormat("0000").format(licSerial.getCurnum());
        return licNo;
    }

 
query的set系列方法很多,不需要都記住,使用的時候查詢即可,重點掌握有特色的方法,如,
  query.setfirstResult(0); //  設置查詢起始位置     

  query.setMaxResult(10);  //  設置查詢記錄數

這兩個方法可以實現分頁;這種方法可以實現不依賴於數據庫(低耦合);

在hibernate.cfg.xml中的name為"dialect"(方言)的property來判斷是哪種數據庫,以方便采用對應數據庫的分頁實現:

    mysql就使用limit,Oracle就是用roll number;
query最常用的方法

  query.list()    query.uniqueResult()       set系列

 

 

criterial 使用:

  cr.add()   在sql語句后拼接查詢限制條件

  Restrictions類提供了查詢限制機制。它提供了許多方法,以實現查詢限制.

Criteria cr = session.createCriteria(Student.class); //生成一個Criteria對象
cr.add(Restrictions.eq("name", "Bill"));//等價於where name=’Bill’
List list = cr.list();
Student stu = (Student)list.get(0);
System.out.println(stu.getName());

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM