久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Hibernate 筆記 HQL查詢(一)單屬性,,多屬性查詢

 昵稱21365845 2015-06-04

HQL是Hiberante官方推薦的Hibernate檢索方式,,它使用類似SQL的查詢語言,以面向對象的方式從數據庫中查詢,??梢允褂肏QL查詢具有繼承、多態(tài)和關聯關系的數據,。在檢索數據時應優(yōu)先考慮使用HQL方式,。

本筆記將會沿用前面所使用的dept部門表,,emp員工表。

dept部門表

emp員工表

1 查詢實體

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

     hql:是查詢對象的,,例如:"from User",其中from不區(qū)分大小寫,,而User是區(qū)分大小寫,,因為它是對象。是User類

     返回Query對象,。

     執(zhí)行這條語句后,,Hibernate會根據配置文件中所配置的數據庫適配器自動生成相應數據庫的SQL語句。

sql: select * from dept;     from 后面是表名

hql: form Dept;    from 后面是類,。

可以對類起別名,,有兩種方法。

hql: from Dept d

hql:from Dept as d

以上兩種起別名方法皆可,。

復制代碼
public 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());

}
tr.commit();
}catch(Exception e){
tr.rollback();
}finally{
if(session!=null){
session.close();
}
if(sessionFactory!=null){
sessionFactory.close();
}
}
}
復制代碼

執(zhí)行結果

Hibernate: select dept0_.did as did1_, dept0_.dname as dname1_, dept0_.daddress as daddress1_ from dept dept0_
部門編號:  1   部門名稱:   業(yè)務部
部門編號:  2   部門名稱:   技術部
部門編號:  3   部門名稱:   管理部
部門編號:  4   部門名稱:   財務部
部門編號:  5   部門名稱:   人力資源部

 

2  查詢表中單個屬性

sql: select ename from dept

hql: select ename from Dept

對屬性也可以設置別名

hql:select ename as from Dept

as 必須加,。

復制代碼
    public void Test2() throws Exception{ 
Configuration config=new Configuration().configure();
SessionFactory sessionFactory= config.buildSessionFactory();
Session session=null;
Transaction tr=null;
try{
session= sessionFactory.openSession();
tr=session.beginTransaction();
Query query=session.createQuery("select dname from Dept");
List<String> list = query.list();
for(String name:list){
System.out.println("部門名稱: "+name);
}
tr.commit();
}catch(Exception e){
tr.rollback();
}finally{
if(session!=null){
session.close();
}
if(sessionFactory!=null){
sessionFactory.close();
}
}
}
復制代碼

 

 執(zhí)行結果

Hibernate: select dept0_.dname as col_0_0_ from dept dept0_
部門名稱: 業(yè)務部
部門名稱: 技術部
部門名稱: 管理部
部門名稱: 財務部
部門名稱: 人力資源部

3  對多個屬性進行查詢

sql: select ename,eage from emp

hql:select ename,eage from Emp

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

以上兩種hql寫法均可,。

復制代碼
public void Test3() throws Exception{
Configuration config=new Configuration().configure();
SessionFactory sessionFactory= config.buildSessionFactory();
Session session=null;
Transaction tr=null;
try{
session= sessionFactory.openSession();
tr=session.beginTransaction();
Query query=session.createQuery("select ename,eage from Emp");
List<Object[]> list = query.list(); //對多個屬性查詢的時候,使用Obejct數組,。

for(Object[] message:list){
System.out.println(Arrays.toString(message)); //采用輔助類Arrays的toString()方法打印數組,。
}
tr.commit();
}catch(Exception e){
tr.rollback();
}finally{
if(session!=null){
session.close();
}
if(sessionFactory!=null){
sessionFactory.close();
}
}
}
復制代碼

 

測試結果

Hibernate: select emp0_.ename as col_0_0_, emp0_.eage as col_1_0_ from emp emp0_
[劉德華, 40]
[李世民, 34]
[曹操, 59]
[和珅, 44]
[賀龍, 45]
[郭富城, 34]

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;
}
復制代碼

 

 

測試類

復制代碼
public void Test4() throws Exception{ 
Configuration config=new Configuration().configure();
SessionFactory sessionFactory= config.buildSessionFactory();
Session session=null;
Transaction tr=null;
try{
session= sessionFactory.openSession();
tr=session.beginTransaction();
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());
}
tr.commit();
}catch(Exception e){
tr.rollback();
}finally{
if(session!=null){
session.close();
}
if(sessionFactory!=null){
sessionFactory.close();
}
}
}
復制代碼

測試結果

Hibernate: select emp0_.eage as col_0_0_, emp0_.ename as col_1_0_ from emp emp0_
姓名:劉德華  年齡:40
姓名:李世民  年齡:34
姓名:曹操  年齡:59
姓名:和珅  年齡:44
姓名:賀龍  年齡:45
姓名:郭富城  年齡:34

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙,。如發(fā)現有害或侵權內容,,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多