Hibernate 原生SQL查詢

2022-06-04 08:03:09 字數 2132 閱讀 6539

hql儘管容易使用,但是在一些複雜的資料操作上功能有限。特別是在實現複雜的報表統計與計算,以及多表連線查詢上往往無能為力,

這時可以使用sql(native sql)實現hql無法完成的任務。 

1、使用sql查詢 

使用sql查詢可以通過兩種方式來實現:

(1)、利用hibernate提供的sqlquery物件執行。即可以通過session物件的createsqlquery()方法獲取。如:

string sql = "select * from product limit 0,10";

sqlquery query =session.createsqlquery(sql);

list

=query.list();

注意:查詢結果返回的是乙個object的陣列。

(2)、利用resultmetadata物件來實現執行sql語句,但是如果過多地使用這種方法就會對系統的效能產生影響,它將降低執行效率。

通過addscalar()方法設定返回資料的型別可以減少resultsetmetadata物件的使用而提高執行效率。如:

string sql = "select * from product limit 0,10";

sqlquery sqlquery =session.createsqlquery();

sqlquery.addscalar("id",hibernate.integer);

sqlquery.addscalar("name",hibernate.string);

sqlquery.addscalar("addre",hibernate.string);

sqlquery.addscalar("des",hibernate.string);

list

list =sqlquery.list();

2、返回sql查詢的持久物件

獲取sql查詢的持久物件有三種方式實現:

方式1:hibernate不僅能把查詢到的記錄封裝為包含多個object陣列的list物件返回,還可以把每一條查詢到的記錄封裝成持久物件後返回包含這些物件的list物件。如:

string sql = "select * from product limit 0,10";

sqlquery sqlquery =session.createsqlquery();

sqlquery.addentity(product .

class

); list

list =sqlquery.list();

方式2:使用大括號指定查詢的字段,然後通過sqlquery物件物件的addentity()方法關聯sql中的別名和持久化類確定要返回的list物件中的每個元素型別。如:

string sql = "select from product p,category c where p.category_id=c.id";

sqlquery sqlquery =session.createsqlquery();

sqlquery.addentity("p",product.class

); list

list =sqlquery.list();

方式3:同時使用sqlquery物件的addscalar()方法和transformers物件的aliastobean()方法關聯資料庫的表與持久化類確定返回記錄的各個欄位與持久化類

屬性的物件對應關係。如:

string sql = "select p.id,p.name from product p,category c where p.category_id = c.id";

sqlquery sqlquery =session.createsqlquery(sql);

sqlquery.addscalar("id",hibernate.integer).addscalar("name",hibernate.string);

sqlquery.setresulttransformer(transformers.aliastobean(product.

class

));

list

list = sqlquery.list();

hibernate 原生sql的使用

hql儘管容易使用,但是在一些複雜的資料操作上功能有限。特別是在實現複雜的報表統計與計算,以及多表連線查詢上往往無能為力,這時可以使用sql native sql 實現hql無法完成的任務。1 使用sql查詢 使用sql查詢可以通過兩種方式來實現 1 利用hibernate提供的sqlquery物件...

hibernate 原生sql 命名查詢

sql query中必須把錶所有的列寫全才可以,否則會出現 列名無效 的錯誤 除非你使用return scalar來設定字段型別。使用return property來明確地指定字段 別名,但是列字段要寫全,兩種配置方式 select from blog t where t.content like ...

Hibernate使用原生SQL適應複雜資料查詢

hibernate使用原生sql適應複雜資料查詢 hql儘管容易使用,但是在一些複雜的資料操作上功能有限。特別是在實現複雜的報表統計與計算,以及多表連線查詢上往往無能為力,這時可以使用sql native sql 實現hql無法完成的任務。1 使用sql查詢 使用sql查詢可以通過兩種方式來實現 1...