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

2021-07-14 03:08:35 字數 2053 閱讀 6243

hibernate使用原生sql適應複雜資料查詢                

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);

listlist = 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);

listlist = 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);

listlist = 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));

listlist = sqlquery.list();



hibernate 原生sql的使用

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

hibernate原生語句的使用,

一.查詢物件的所有字段 string sql select from jbpm processdefinition sqlquery sqlquey session.createsqlquery sql addentity processdefinition.class listprocessdef...

hibernate中使用原生sql查詢

hibernate使用hql查詢有諸多不便,比如無法在from後面使用select子查詢,貌似可以解決但是挺麻煩 所以這裡記錄下自己找到的一些寫法 首先拿到session物件 hibernatesessionfactory.getsession 這個類是我找的乙個工具類,下面會附上工具 直接丟裡面用...