hibernate使用原生sql幫助類

2021-09-02 10:06:39 字數 1297 閱讀 5341

hibernate出現很久了,的確用起來很省事,只需要處理物件就可以運算元據庫。但是凡事都有兩面性,它的省事帶來的乙個問題就是確實不太靈活。有時候一句sql搞定的事情,用hql寫看後台日誌的話會發現它會把簡單的事情複雜化,大大降低了效率。

hibernate支援sql情況如下:session.createsqlquery("select * from *** where .....").addentity(a.class)。這個a類必須是對應庫表對映的,否則資料是無法回填的。如果查詢結果集為多表的組合,那麼你的sql要寫成select a.*,b.*c.*... from a,b,c,...where ...然後分別對這幾個表對應的實體類進行addentity後來忍無可忍,直接寫sql接收返回的list(query.list()),然後遍歷陣列,從list中取object陣列,再從陣列中取值手動新增到實體類,雖然這個地方寫的比較繁瑣,但是減少了與資料庫的互動,也略去了不需要的資料。

對於用慣原生sql的我來說,更愛這種寫原生sql的方法。當然比較簡單的查詢用hql是必然的,要靈活運用。為了讓自己免去重複遍歷list,遍歷陣列的重複勞動,寫了下面幫助方法,如果有跟我一樣的兄台,也可以一用。

private static final string method_key = "set";

public static synchronized void fixdatatoclz(object clz,string orderarray,object dataarray);

注意,這個陣列長度一定是跟查詢元素的個數是一致的,但是內容要跟我們建立的自定義實體類的屬性值一致。表a的id如果對應 自定義實體類的屬性是 a_id,那麼我們的陣列中寫的就是a_id而非id

3.listlist = query.list();

listtestlist = new arraylist();

if(!arrayutils.isempty(list)){

for(object obj_array:list){

//new 乙個需要回填值的實體類,不管是否在資料庫有否對映表

test test = new test();

/**呼叫幫助方法,引數說明:自定義實體類物件(test類),根據sql語句建立的陣列(order_array

注意陣列元素順序與sql查詢column順序一致),資料陣列(obj_array由query.list()返回list中取得)。**/

fixdatatoclz(test ,order_array,obj_array);

//將已經被填入值的實體類加入到list中去。

testlist.add(test);

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