Hibernate4呼叫SQL和儲存過程

2022-08-31 23:51:23 字數 3693 閱讀 8903

最近使用了新的struts2.20+spring4.0+hibernate4.0,新框架移除了hibernatesupportdao,所以重寫了下hibernate4對sql和儲存過程的操作,以備後查

以下的sessionfactory 物件是通過spring注入
1

private

sessionfactory sessionfactory;

2public

void

setsessionfactory(sessionfactory sessionfactory)

1、通過sql查詢,以list的方式返回

1

/**2

* 通過sql查詢,結果集不作處理直接返回3*

@param

querystring 查詢字串4*

@param

params 引數5*

@return6*/

7 @suppresswarnings("unchecked")

8public listfind_sql(string querystring,object params)15}

16 listlist =query.list();

17return

list;

18 }

2、sql或儲存過程查詢,將返回的結果集轉換成map,結果集列名作為鍵

1

/**2

* 通過sql查詢,將結果集轉換成map物件,列名作為鍵(適用於有返回結果集的儲存過程或查詢語句)3*

@param

querystring4*

@param

params5*

@return6*/

7 @suppresswarnings("unchecked")

8public list>find_sql_tomap(string querystring,object params)16}

17 list> list =query.list();

18return

list;

19 }

3、sql執行增、刪、改操作,測試使用該方法執行儲存過程會報錯

1

/**2

* 通過sql執行無返回結果的語句,執行修改、刪除、新增等(適用於無結果集返回sql語句,不能用於儲存過程)3*

@param

querystring4*

@param

params5*/

6public

void

executesql(string querystring,object params)13}

14query.executeupdate();

15 }

4、執行無結果集返回的儲存過程,是第3點的補充

1

/**2

* 通過sql執行無返回結果的儲存過程(僅限於儲存過程)3*

@param

querystring4*

@param

params5*/

6public

void executevoidproceduresql(final string querystring,final object params) throws

exception");

12if (null !=params) 16}

17 rs =call.executequery();

18call.close();

19rs.close();20}

21});

22 }

5、通過儲存過程查詢,返回的結果集必須為單結果集,與第2點方法效果一致

1

/**2

* 通過儲存過程查詢(單結果集)3*

@param

sql 查詢sql4*

@param

params 引數5*

@param

columnnum 返回的列數6*

@return7*/

8public list> find_procedure(final string sql,final

object params)

20 rs =cs.executequery();

21 resultsetmetadata metadata =rs.getmetadata();

22int colcount=metadata.getcolumncount();

23while

(rs.next())

29result.add(map);30}

31close( cs, rs);32}

33});

34return

result;

35 } catch

(exception e)

38return

null

;39 }

6、通過儲存過程查詢,適用返回的結果集有乙個或多個

1

/**2

* 通過儲存過程查詢(多結果集)3*

@param

sql 查詢sql4*

@param

params 引數5*

@param

columnnum 返回的列數6*

@return7*/

8public list>> find_procedure_multi(final string sql,final

object params)

21boolean hadresults =cs.execute();

22 resultsetmetadata metadata = null;23

while(hadresults)

34rslist.add(map);35}

36result.add(rslist);

37 close(null, rs);//

遍歷完乙個結果集,將其關閉

38 hadresults=cs.getmoreresults();//

移到下乙個結果集39}

40close(cs, rs);41}

42});

43return

result;

44 } catch

(exception e)

47return

null

;48 }

**中的close方法,執行dowork的execute方法中不能關閉connection,connection連同session由spring管理

1

private

void

close(callablestatement cs,resultset rs)

6if(rs!=null

)9 } catch

(exception e)

12 }

hibernate4使用本地sql查詢和刪除

public listlistall mapmap,int pn,int pagesize throws exception if global.isempty map.get mmssubject if global.isempty map.get startmmsdate if global.i...

HIBERNATE4原始碼編譯

git gradlew.bat assemble 可跳過測試,否則執行gradlew.bat build的過程中,遇到test出錯會報錯退出 本以為會順利結束,沒想到又報錯了。是符號無法識別轉換的錯誤。在網上搜尋了一番,這個跟系統的區域設定有關。需要改為 英語 英國 我試了英語 美國 居然還是報錯。...

osgi 環境下 hibernate 4 配置

準備將公司的老應用遷移到osgi karaf平台上。很 的一點就是hibernate。這玩意,真是超級麻煩的乙個工程。classload是最頭痛的乙個問題。在hibernate4上利用註冊服務的方式 實現了 classloader的 順便提一句想用hibernate3做reloadclass的同學們...