Java學習筆記-Hibernate HQL查詢

來源:互聯網
上載者:User

標籤:

Session是持久層操作的基礎,相當於JDBC中的Connection,通過Session會話來儲存、更新、尋找資料。
session是Hibernate運作的中心,對象的生命週期、事務的管理、資料庫的存取都與Session有關
Session由SessionFactory建立,是安全執行緒的Thread-Safe,可以讓多個線程同時存取SessionFactory
而不會有資料共用的問題 


Hibernate中Session的解釋 :http://blog.csdn.net/shrek_xu/article/details/740991
Hibernate 筆記 HQL查詢(一)單屬性,多屬性查詢 : http://www.cnblogs.com/zilong882008/archive/2011/11/05/2237123.html

 

1. hql的查詢應用:

hibernate的session.createQuery()方法是使用HQL語句查詢對象的。

hql:是查詢對象的,例如:"from User",其中from不區分大小寫,而User區分大小寫,因為它是對象。是User類
返回Query對象。
執行這條語句後,Hibernate會根據設定檔中所配置的資料庫適配器自動產生相應資料庫的SQL語句。

sql: select * from dept; from 後面是表名
hql: form Dept; from 後面是

可以對類起別名,有兩種方法。
hql: from Dept d
hql:from Dept as d

 

2. 查詢表中單個屬性
sql: select ename from dept
hql: select ename from Dept

對屬性也可以設定別名
hql:select ename as from Dept
as 必須加。

 

3. 多屬性查詢

sql: select ename,eage from emp
hql: select ename,eage from Emp
hql: select e.ename,e.eage from Emp e

注意:對多個屬性查詢的時候,使用Obejct數組。

 //第三個查詢:對多屬性查詢Query query3=session.createQuery("select ename,eage from Emp");    List<Object[]> list3 = query3.list(); //對多個屬性查詢的時候,使用Obejct數組。for(Object[] message:list3){    //採用輔助類Arrays的toString()方法列印數組。    System.out.println(Arrays.toString(message));}  

 

4. 通過實體類方式查詢多屬性

除了上述方法外,還可以採用實體類的方式查詢,要在Emp類中加入帶有查詢參數的構造器,代碼如下。

public class Emp {   private int eid;   private int eage;   private float esal;   private String ename;   省略get,set方法。public Emp() {    super();   }public Emp(int eage, String ename) {    //需要查詢的屬性是什麼,構造器的參數就是什麼。    super();    this.eage = eage;    this.ename = ename;}

查詢代碼:

Query query=session.createQuery("select new Emp(eage,ename) from Emp e");    
//select 後直接調用構造器,參數就是查詢的屬性,參數不可錯亂。List<Emp> list = query.list(); //此處不實用object數組,類類型即可for(Emp message:list){ System.out.print("姓名:"+message.getEname()+" "); System.out.println("年齡:"+message.getEage());}

 

====

例子: 

建表

在資料庫ztest中建Dept表 在資料庫ztest中建Emp表


 

create table DEPT(    DID Integer NOT NULL PRIMARY KEY,     DNAME VARCHAR(12),    DADDRESS VARCHAR(12),)create table EMP(    EID INTEGER NOT NULL PRIMARY KEY,    ENAME VARCHAR(12),    EAGE INTEGER,    ESAL INTEGER,    DID INTEGER,)insert into DEPT values(1,‘業務部‘,‘address101‘)insert into DEPT values(2,‘技術部‘,‘address201‘)insert into DEPT values(3,‘管理部‘,‘address301‘)insert into DEPT values(4,‘財務部‘,‘address401‘)insert into DEPT values(5,‘人力資源部‘,‘address501‘)insert into EMP values(1,‘喬峰‘,30,10000,1)insert into EMP values(2,‘楊過‘,25,15020,2)insert into EMP values(3,‘郭靖‘,33,23563,1)insert into EMP values(4,‘周伯通‘,52,32000,3)insert into EMP values(5,‘東方不敗‘,43,12000,3)insert into EMP values(6,‘任我行‘,44,16000,4)insert into EMP values(7,‘任盈盈‘,30,22000,4)insert into EMP values(8,‘李莫愁‘,42,45000,5)insert into EMP values(9,‘令狐沖‘,35,20000,2)insert into EMP values(10,‘嶽不群‘,50,42000,2)

 

進行查詢

package com.hibernate.hql;import java.util.Arrays;import java.util.List;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;public class Test {    public static void main(String[] args){        try {            Test1() ;        } catch (Exception e) {            e.printStackTrace();        }    }    public static void Test1() throws Exception{           Configuration config=new Configuration().configure();        SessionFactory sessionFactory= config.buildSessionFactory();        Session session=null;        Transaction tr=null;        try{            session= sessionFactory.openSession();            tr=session.beginTransaction();            //第一個查詢            String hql="from Dept"; //定義String類型hql,寫入hql語句。                Query query=session.createQuery(hql);                                List<Dept> list = query.list();                                                  for(Dept dept:list){                                                     System.out.print("部門編號:  "+dept.getDid() +"   ");                 System.out.println("部門名稱:   "+dept.getDname());               }                        //第二個查詢            String hql2 = "from Emp where eid = 5";            Query query2 = session.createQuery(hql2);            List<Emp> list2 = query2.list();            for(Emp emp:list2){                System.out.print("員工編號:"+emp.getEid());                System.out.println("員工姓名:"+emp.getEname());            }                        //第三個查詢:對多屬性查詢            Query query3=session.createQuery("select ename,eage from Emp");                List<Object[]> list3 = query3.list();             //對多個屬性查詢的時候,使用Obejct數組。            for(Object[] message:list3){                //採用輔助類Arrays的toString()方法列印數組。                System.out.println(Arrays.toString(message));            }                                                              tr.commit();                                                     }catch(Exception e){            tr.rollback();        }finally{            if(session!=null){                session.close();            }            if(sessionFactory!=null){                sessionFactory.close();            }        }    }}

 

  

Java學習筆記-Hibernate HQL查詢

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.