Hibernate支持HQL和SQL的查詢,返回結果支持POJO類型或字段/數組的形式。
開發中用Hibernate進行數據庫查詢,用的是SQL。
原來需要查詢一個表的幾乎所有字段,所以我使用了addEntity方法,將查詢結果轉換為映射的對象。
后來需求變更,需要查詢另外幾個表的若干字段,不想繼續用addEntity綁定新加的表(畢竟只有幾個字段需要查詢出來,將多余的字段都轉換成映射對象,或只將需查詢的字段轉換為映射對象,從維護角度來說似乎都不太好),網上查了查:
於是在addEntity后再使用addScalar方法指定字段以指定格式返回
於是返回的List中包含Object[]數組,這樣在數組中除了有addEntity的映射對象,還有指定類型的字段結果
常用的結果集:
一、使用HQL的情況:
- 查詢字段:使用"select t.field from Sample t ",返回List包含Object對象,如果查詢多個單獨字段,則返回的List包含Object[]
-
List<String> list = super.getHibernateTemplate().find("select distinct t.job from Emp t order by t.job");
List<String> list = super.getHibernateTemplate().find("select distinct t.job from Emp t order by t.job");
-
- 查詢單個整個對象:使用"from SampleTable t where t.field = :filed "的寫法,默認返回封裝好的SampleTable對象List
- 查詢多個整個對象:可指定獲取哪些對象,如"select t1, t2 from SampleTable t1, SampleTable t2 where ...",此時會返回List中包含Object[],Object[]中在0位置為SampleTable對象,1為SampleTable對象
- 查詢非映射對象:還可以以構造方法的方式"select new SomeVo(t.field1, t.field2) from xxx t1",返回封裝好的SampleTable對象List
- 既查詢整個對象又查詢單個字段:使用"select t, t2.field from Sample t, Sample2 t2 ",返回List包含Object[]對象,而Object[]包含Sample對象,還有為字段類型的值
二、使用SQL的情況:
- 查詢字段跟HQL的形式類似
- 查詢單個整個對象,由於使用的是SQL,需要程序中用addEntity方法指定SQL查得的值與映射對象的關系(addEntity指定的對象類型必須為已經注冊的映射對象)
- 查詢多個整個對象,用多個addEntity綁定
- 既查詢整個對象又查詢單個字段:在addEntity后再使用addScalar方法,返回List包含Object[]對象,而Object[]包含Sample對象,還有為字段類型的值