2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩34頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  基于hibernate持久層設計方案</p><p><b>  1.持久層概述</b></p><p><b>  持久層功能概述</b></p><p>  持久層主要負責與數據庫的交互,是一組軟件服務,將應用程序與其使用的數據源分離,是業(yè)務邏輯層與數據庫的橋梁。</p><p

2、><b>  設計目標</b></p><p>  我們設計持久層要達到的目標:</p><p>  將數據持久邏輯與表示和業(yè)務邏輯分開的整潔機制</p><p>  使數據所在的數據庫平臺對于框架的應用程序完全隱藏起來</p><p>  抽象數據庫中存儲數據的物理細節(jié)和數據庫實體之間存在的關系</p>

3、;<p>  簡化開發(fā)過程,隱藏打開數據庫連接,事務管理等細節(jié)</p><p>  基于以上目標,我們這里采用對象-關系型數據庫映射(ORM)的方法來操作數據庫。</p><p>  使用持久層開發(fā)基本過程</p><p>  基于框架,持久層的基本開發(fā)過程如下:</p><p>  編寫持久層環(huán)境配置文件(persistenc

4、e.xml)。</p><p>  編寫bo(Bussiness Object)實現(xiàn)業(yè)務功能和業(yè)務描述。</p><p>  編寫bo和數據庫表之間的映射關系描述(annotation)。</p><p>  使用dao對象對bo執(zhí)行持久化操作。</p><p><b>  持久層環(huán)境</b></p>&l

5、t;p><b>  概述</b></p><p>  使用框架的持久層開發(fā)之前,我們要先做一些準備,搭建好持久層的環(huán)境,也就是編寫持久層環(huán)境配置文件persistence.xml。</p><p>  編寫persistence.xml</p><p>  persistence.xml文件是持久層與數據庫連接屬性的配置文件,可以直接使用

6、weblogic的數據源。</p><p>  我們現(xiàn)在使用weblogic的數據源OracleDS,配置文件的代碼如下:</p><p><b>  實現(xiàn)O-R映射</b></p><p>  創(chuàng)建bo(Bussiness Object)</p><p>  我們使用bo來實現(xiàn)業(yè)務描述</p><p

7、><b>  創(chuàng)建bo的步驟:</b></p><p>  bo須繼承某一bo的基類(此基類可以根據具體項目來具體封裝,但一定要繼承類SwordBaseBO)。</p><p>  為bo的每個屬性添加get和set方法</p><p>  在set方法中添加support.firePropertyChange()方法</p>

8、<p><b>  為bo添加注釋</b></p><p>  在關系數據庫中建立相應的表</p><p>  下面我們來使用一個具體的例子來說明創(chuàng)建一個bo的過程。</p><p>  下面是LeaveBO.java的部分源代碼</p><p><b>  注意:</b></p

9、><p>  bo一定要繼承類SwordBaseBO</p><p>  對于每個屬性添加get和set方法。</p><p>  在set方法里注冊firePropertyChange方法</p><p><b>  設置標注</b></p><p>  在關系數據庫中創(chuàng)建表</p>

10、<p>  我們在oracal數據庫中創(chuàng)建表student,執(zhí)行的sql為:</p><p>  使用持久層操作數據庫</p><p>  持久層的關鍵就是類型為IPersistenceDAO的對象,我們對數據庫的操作都是通過這個對象來實現(xiàn)的,所以下面主要講解如何在環(huán)境中獲得和使用IPersistenceDAO對象。</p><p>  獲得IPersis

11、tenceDAO對象</p><p>  可以使用以下代碼獲得IPersistenceDAO對象:</p><p><b>  新增操作</b></p><p>  public void saveBO(IDaoBusinessObject bo)</p><p><b>  說明:</b><

12、/p><p>  saveBO方法用來對數據庫中的一張表執(zhí)行插入操作</p><p>  該方法僅僅用來對一張表插入一條記錄</p><p>  當數據庫中有初始值的時候,使用此方法會將數據庫的初始值覆蓋為null,所以數據庫有初始值時請使用execute方法</p><p><b>  示例代碼:</b></p>

13、;<p>  public void saveBO(List bos)</p><p><b>  說明:</b></p><p>  批量的對一批BO進行數據庫對應表的新增,List中的BO類型可以是不同的,但他們都必須實現(xiàn)IDaoBusinessObject 接口。</p><p>  saveBO方法用來批量的執(zhí)行一組ins

14、ert語句 </p><p><b>  示例代碼:</b></p><p><b>  刪除操作</b></p><p>  public void deleteBO(IDaoBusinessObject bo)</p><p><b>  說明:</b></p>

15、<p>  從數據庫中刪除該BO所對應的記錄,該方法是根據BO的主鍵來進行匹配刪除的</p><p>  該方法內部使用hibernate的session進行操作</p><p><b>  示例代碼:</b></p><p>  public void deleteBO(List bos)</p><p>

16、;<b>  說明:</b></p><p>  批量的刪除一匹BO對象</p><p>  BO對象可以是不同類型的,但是在刪除之前必須要確保它們與其他BO之間已經沒有任何關聯(lián)關系</p><p>  該方法不會自動的刪除BO與其他BO之間的關系</p><p><b>  示例代碼:</b>&l

17、t;/p><p><b>  更新操作</b></p><p>  public int updateBO(IDaoBusinessObject bo)</p><p><b>  說明:</b></p><p>  updateBO方法用來對數據庫中的一張表執(zhí)行更新操作</p><

18、p>  該方法僅僅用來對一張表更新一條記錄 </p><p>  在執(zhí)行更新操作的時候,該方法只識別set后的屬性</p><p>  set方法中要有對應的this.firePropertyChange()方法,否則不執(zhí)行更新操作</p><p><b>  示例代碼:</b></p><p>  public

19、int updateBO(List bos)</p><p><b>  說明:</b></p><p>  批量的更新一匹BO對象</p><p>  在執(zhí)行更新操作的時候,該方法只識別set后的屬性</p><p>  set方法中要有對應的this.firePropertyChange()方法,否則不執(zhí)行更新操作&

20、lt;/p><p><b>  示例代碼:</b></p><p><b>  查詢操作</b></p><p>  List query(Class  boClass, String  sqlStr,List  sqlParams)</p><p><b> 

21、 說明:</b></p><p>  該方法一次性查詢出滿足條件的bo集合</p><p>  查詢數據庫中的字段名稱要與bo中的屬性名稱符合規(guī)范,否則將無法正確將數據裝入bo中</p><p><b>  Example:</b></p><p>  字段名稱: JG_DM NAME</p&g

22、t;<p>  對應Bo屬性: jgDm name</p><p>  該分頁查詢只支持前臺分頁,即在前臺點擊上下頁時不再從后臺查詢</p><p>  boClass要查詢的BO對象的類型</p><p>  sqlStr 要查詢的SQL語句,是一個完整的語句。例"select * from t_leave where name=?

23、order by id desc "</p><p>  sqlParams該屬性中填充where條件中的參數值</p><p><b>  示例代碼:</b></p><p>  CachedRowSet query(String  sqlStr,List  sqlParams)</p><

24、p><b>  說明:</b></p><p>  通過SQL一次性查詢出滿足條件的記錄,查詢結果存入CachedRowSet中</p><p>  該分頁查詢只支持前臺分頁,即在前臺點擊上下頁時不再從后臺查詢</p><p>  sqlStr 要查詢的SQL語句,是一個完整的語句。例"select * from t_leave

25、 where name=? order by id desc "</p><p>  sqlParams該屬性中填充where條件中的參數值</p><p><b>  示例代碼:</b></p><p>  List queryByKey(Class  boClass, String  sqlKey, Lis

26、t  sqlParams) </p><p><b>  說明:</b></p><p>  該方法一次性查詢出滿足條件的bo集合</p><p>  查詢數據庫中的字段名稱要與bo中的屬性名稱符合規(guī)范,否則將無法正確將數據裝入bo中</p><p><b>  Example:</b>&

27、lt;/p><p>  字段名稱: JG_DM NAME</p><p>  對應Bo屬性: jgDm name</p><p>  該分頁查詢只支持前臺分頁,即在前臺點擊上下頁時不再從后臺查詢</p><p>  boClass要查詢的BO對象的類型</p><p>  sqlKey 要查詢的SQL語句所對

28、應的key,需要在sql-*.xml中聲明</p><p>  sqlParams該屬性中填充where條件中的參數值</p><p><b>  示例代碼:</b></p><p>  sql-org.xml:</p><p>  CachedRowSet queryByKey(String  sqlKey

29、, List  sqlParams) </p><p><b>  說明:</b></p><p>  通過SQL一次性查詢出滿足條件的記錄,查詢結果存入CachedRowSet中</p><p>  該分頁查詢只支持前臺分頁,即在前臺點擊上下頁時不再從后臺查詢</p><p>  sqlKey 要查詢的SQL

30、語句所對應的key,需要在sql-*.xml中聲明</p><p>  params該屬性中填充where條件中的參數值</p><p><b>  示例代碼:</b></p><p>  sql-org.xml:</p><p>  CachedRowSet queryPageBySQL(String sq

31、lStr, List sqlParams, int totalNum, int pageNum) </p><p><b>  說明:</b></p><p>  標準的分頁查詢,通過totalNum*pageNum標明查詢的起始位置,通過totalNum標明每次查詢的數據總數,查詢結果存入CachedRowSet中</p>

32、<p>  該分頁查詢只支持前臺分頁,即在前臺點擊上下頁時不再從后臺查詢</p><p>  sqlStr要查詢的SQL語句,是一個完整的語句。例"select * from t_leave where name=? order by id desc "</p><p>  sqlParams該屬性中填充where條件中的參數值</p>&l

33、t;p>  totalNum每次獲取數據總數</p><p>  pageNum頁數,從0開始</p><p>  totalNum*pageNum代表查詢數據的起始行</p><p><b>  示例代碼:</b></p><p>  List pageQuery(Class boClass, String wi

34、dgetName, String sqlStr)</p><p><b>  說明:</b></p><p>  后臺分頁查詢,默認每次獲取20條數據,此時前臺頁面rows屬性不再起作用</p><p>  查詢數據庫中的字段名稱要與bo中的屬性名稱符合規(guī)范,否則將無法正確將數據裝入bo中</p><p><b&

35、gt;  Example:</b></p><p>  字段名稱: JG_DM NAME</p><p>  對應Bo屬性: jgDm name</p><p>  該分頁查詢支持后臺分頁,即在前臺點擊上下頁時從后臺查詢</p><p>  boClass要查詢BO對象的類型</p><p>

36、  widgetName前臺表格組件名稱</p><p>  sqlStr要查詢的SQL語句,是一個完整的語句。例"select * from t_leave where name= '11 ' order by id desc "</p><p><b>  示例代碼:</b></p><p><b

37、>  頁面</b></p><p>  CachedRowSet pageQuery(String  widgetName, String  sqlStr)</p><p><b>  說明:</b></p><p>  后臺分頁查詢,默認每次獲取20條數據,此時前臺頁面rows屬性不再起作用,查詢結果存

38、入CachedRowSet中</p><p>  該分頁查詢支持后臺分頁,即在前臺點擊上下頁時從后臺查詢</p><p>  widgetName前臺表格組件名稱</p><p>  sqlStr要查詢的SQL語句,是一個完整的語句。例"select * from t_leave where name= '11 ' order by id

39、 desc "</p><p><b>  示例代碼:</b></p><p><b>  頁面</b></p><p>  List pageQuery(Class boClass, String widgetName, String sqlStr, List sqlP

40、arams, int totalNum, int pageNum, String sortName, PaginationManager.SortFlag sf) </p><p><b>  說明:</b></p><p>  后臺分頁查詢,此時前臺頁面rows屬性不再起作用,通過totalNum*(pageNum-1)標明查

41、詢的起始位置,通過totalNum標明每次查詢的數據總數</p><p>  查詢數據庫中的字段名稱要與bo中的屬性名稱符合規(guī)范,否則將無法正確將數據裝入bo中</p><p><b>  Example:</b></p><p>  字段名稱: JG_DM NAME</p><p>  對應Bo屬性: jgD

42、m name</p><p>  該分頁查詢支持后臺分頁,即在前臺點擊上下頁時從后臺查詢</p><p>  boClass要查詢BO對象的類型</p><p>  widgetName前臺表格組件名稱</p><p>  sqlStr要查詢的SQL語句,是一個完整的語句。例"select * from t_leave wher

43、e name= ? "</p><p>  sqlParams該屬性中填充where條件中的參數值</p><p>  totalNum每頁獲取數據總數</p><p>  pageNum頁數,從1開始</p><p>  sortName排序字段名</p><p><b>  sf排序方式 &l

44、t;/b></p><p>  PaginationManager.SortFlag.asc或者PaginationManager.SortFlag.desc</p><p><b>  示例代碼:</b></p><p><b>  頁面</b></p><p>  CachedRowSet

45、 pageQuery(String widgetName, String sqlStr, List sqlParams, int totalNum, int pageNum, String sortName, PaginationManager.SortFlag sf) </p><p><b>  說明:</b><

46、/p><p>  后臺分頁查詢,此時前臺頁面rows屬性不再起作用,通過totalNum*(pageNum-1)標明查詢的起始位置,通過totalNum標明每次查詢的數據總數,查詢結果存入CachedRowSet中</p><p>  該分頁查詢支持后臺分頁,即在前臺點擊上下頁時從后臺查詢</p><p>  widgetName前臺表格組件名稱</p>

47、<p>  sqlStr要查詢的SQL語句,是一個完整的語句。例"select * from t_leave where name= ? "</p><p>  sqlParams該屬性中填充where條件中的參數值</p><p>  totalNum每頁獲取數據總數</p><p>  pageNum頁數,從1開始</p>

48、;<p>  sortName排序字段名</p><p><b>  sf排序方式 </b></p><p>  PaginationManager.SortFlag.asc或者PaginationManager.SortFlag.desc</p><p><b>  示例代碼:</b></p>

49、<p><b>  頁面</b></p><p>  List pageQuery(Class boClass, String widgetName, String sqlStr, List sqlParams, String sortName, PaginationManager.SortFlag sf)</p

50、><p><b>  說明:</b></p><p>  后臺分頁查詢,默認每次獲取20條數據,此時前臺頁面rows屬性不再起作用 </p><p>  查詢數據庫中的字段名稱要與bo中的屬性名稱符合規(guī)范,否則將無法正確將數據裝入bo中</p><p><b>  Example:</b></p&

51、gt;<p>  字段名稱: JG_DM NAME</p><p>  對應Bo屬性: jgDm name</p><p>  該分頁查詢支持后臺分頁,即在前臺點擊上下頁時從后臺查詢</p><p>  boClass要查詢BO對象的類型</p><p>  widgetName前臺表格組件名稱</p>

52、<p>  sqlStr要查詢的SQL語句,是一個完整的語句。例"select * from t_leave where name= ? "</p><p>  sqlParams該屬性中填充where條件中的參數值</p><p>  sortName排序字段名</p><p><b>  sf排序方式 </b&

53、gt;</p><p>  PaginationManager.SortFlag.asc或者PaginationManager.SortFlag.desc</p><p><b>  示例代碼:</b></p><p><b>  頁面</b></p><p>  CachedRowSet page

54、Query(String widgetName, String sqlStr, List sqlParams, String sortName, PaginationManager.SortFlag sf) </p><p><b>  說明:</b></p><p>  后臺分頁查詢,默認每次獲取20條數據,此時前臺

55、頁面rows屬性不再起作用,查詢結果存入CachedRowSet中</p><p>  該分頁查詢支持后臺分頁,即在前臺點擊上下頁時從后臺查詢</p><p>  widgetName前臺表格組件名稱</p><p>  sqlStr要查詢的SQL語句,是一個完整的語句。例"select * from t_leave where name= ? "

56、;</p><p>  sqlParams該屬性中填充where條件中的參數值</p><p>  sortName排序字段名</p><p><b>  sf排序方式 </b></p><p>  PaginationManager.SortFlag.asc或者PaginationManager.SortFlag.d

57、esc</p><p><b>  示例代碼:</b></p><p><b>  頁面</b></p><p>  List pageQuery(Class  boClass, String  widgetName, String  sqlStr, List  sqlParams)

58、 </p><p><b>  說明:</b></p><p>  后臺分頁查詢,默認每次獲取20條數據,此時前臺頁面rows屬性不再起作用</p><p>  查詢數據庫中的字段名稱要與bo中的屬性名稱符合規(guī)范,否則將無法正確將數據裝入bo中</p><p><b>  Example:</b>&

59、lt;/p><p>  字段名稱: JG_DM NAME</p><p>  對應Bo屬性: jgDm name</p><p>  該分頁查詢支持后臺分頁,即在前臺點擊上下頁時從后臺查詢</p><p>  boClass要查詢BO對象的類型</p><p>  widgetName前臺表格組件名稱<

60、/p><p>  sqlStr要查詢的SQL語句,是一個完整的語句。例"select * from t_leave where name= ? "</p><p>  sqlParams該屬性中填充where條件中的參數值</p><p><b>  示例代碼:</b></p><p><b>

61、  頁面</b></p><p>  CachedRowSet pageQuery(String widgetName, String sqlStr, List sqlParams) </p><p><b>  說明:</b></p><p>  后臺分頁查詢,默認每次獲取20條數據,此時前臺頁面ro

62、ws屬性不再起作用,查詢結果存入CachedRowSet中</p><p>  該分頁查詢支持后臺分頁,即在前臺點擊上下頁時從后臺查詢</p><p>  widgetName前臺表格組件名稱</p><p>  sqlStr要查詢的SQL語句,是一個完整的語句。例"select * from t_leave where name= ? "<

63、;/p><p>  sqlParams該屬性中填充where條件中的參數值</p><p><b>  示例代碼:</b></p><p><b>  頁面</b></p><p>  List pageQuery(Class  boClass, String  widgetName

64、, String  sqlStr, List  sqlParams, int  totalNum, int  pageNum)</p><p><b>  說明:</b></p><p>  后臺分頁查詢,此時前臺頁面rows屬性不再起作用,通過totalNum*(pageNum-1)標明查詢的起始位置,通過totalNum標明

65、每次查詢的數據總數</p><p>  查詢數據庫中的字段名稱要與bo中的屬性名稱符合規(guī)范,否則將無法正確將數據裝入bo中</p><p><b>  Example:</b></p><p>  字段名稱: JG_DM NAME</p><p>  對應Bo屬性: jgDm name</p>

66、<p>  該分頁查詢支持后臺分頁,即在前臺點擊上下頁時從后臺查詢</p><p>  boClass要查詢BO對象的類型</p><p>  widgetName前臺表格組件名稱</p><p>  sqlStr要查詢的SQL語句,是一個完整的語句。例"select * from t_leave where name= ? "<

67、;/p><p>  sqlParams該屬性中填充where條件中的參數值</p><p>  totalNum每頁獲取數據總數</p><p>  pageNum頁數,從1開始</p><p><b>  示例代碼:</b></p><p><b>  頁面</b></p

68、><p>  CachedRowSet pageQuery(String widgetName, String sqlStr, List sqlParams, int totalNum, int pageNum) </p><p><b>  說明:</b></p><p>  后臺分頁查詢,此時前

69、臺頁面rows屬性不再起作用,通過totalNum*(pageNum-1)標明查詢的起始位置,通過totalNum標明每次查詢的數據總數,查詢結果存入CachedRowSet中</p><p>  該分頁查詢支持后臺分頁,即在前臺點擊上下頁時從后臺查詢 </p><p>  widgetName前臺表格組件名稱</p><p>  sqlStr要查詢的SQL語句,是

70、一個完整的語句。例"select * from t_leave where name= ? "</p><p>  sqlParams該屬性中填充where條件中的參數值</p><p>  totalNum每頁獲取數據總數</p><p>  pageNum頁數,從1開始</p><p><b>  示例代碼:

71、</b></p><p><b>  頁面</b></p><p><b>  增刪改</b></p><p>  int execute(String sqlStr , List sqlParams)</p><p><b>  說明:</b></p&

72、gt;<p>  用來執(zhí)行不返回結果集的SQL語句。比如添加,修改,刪除SQL語句</p><p>  sqlStr 要查詢的SQL語句,是一個完整的語句。例"select * from t_leave where name=? order by id desc "</p><p>  sqlParams該屬性中填充where條件中的參數值</p&g

73、t;<p><b>  示例代碼:</b></p><p>  blob和clob操作</p><p>  含有blob和clob屬性bo的創(chuàng)建</p><p>  要增加blob和clob屬性,需要在bo、數據庫表結構兩個地方做修改。</p><p>  首先修改bo,我們繼續(xù)使用前面LeaveBO.ja

74、va的例子,修改后的代碼為:</p><p>  最后數據庫中的表結構也需要調整,sql為:</p><p>  注意:如果數據庫中含有BLOB字段,查詢的sql語句不能使用【*】</p><p><b>  例如:</b></p><p>  錯誤的寫法:select * from t_leave</p>

75、<p>  正確的寫法:select id,name,type from t_leave</p><p><b>  對clob的操作</b></p><p>  在對clob屬性進行操作時,只把它當成一個普通的字符串操作即可</p><p>  byte[] fetchBlob(Object boInstance, St

76、ring blobFieldName) </p><p><b>  說明:</b></p><p>  取出Blob,該方法根據boInstance的主鍵和Blob字段名將數據庫中的數據寫入byte數組中</p><p>  boInstance,要查詢的bo對象</p><p>  blobFieldNam

77、e,bo對象中將要取得的blob的屬性名稱</p><p><b>  示例代碼</b></p><p>  void fetchBlob(Object boInstance, String blobFieldName, OutputStream os) </p><p><b>  說明:</b&

78、gt;</p><p>  取出Blob,該方法根據boInstance的主鍵和Blob字段名將數據庫中的數據寫入指定的輸出流中</p><p>  boInstance,要查詢的bo對象</p><p>  blobFieldName,bo對象中將要取得的blob的屬性名稱</p><p>  os ,將blob中數據寫入此輸出流中<

79、/p><p><b>  示例代碼</b></p><p>  void fillBlob(Object boInstance, String blobFieldName, byte[] bytes) </p><p><b>  說明:</b></p><p>  填充B

80、lob,該方法根據boInstance的主鍵和Blob字段名將字節(jié)數組中的內容寫入數據庫中</p><p>  執(zhí)行此方法時一定要保證數據庫中已經存在bo的對應信息</p><p>  boInstance ,BO的實例</p><p>  blobFieldName ,字段的屬性名</p><p>  bytes,填充的內容,為字節(jié)數組&l

81、t;/p><p><b>  示例代碼:</b></p><p>  void fillBlob(Object boInstance, String blobFieldName, InputStream is) </p><p><b>  說明:</b></p><p>

82、  填充Blob,該方法根據boInstance的主鍵和Blob字段名將輸入流中的內容寫入數據庫中</p><p>  執(zhí)行此方法時一定要保證數據庫中已經存在bo的對應信息</p><p>  boInstance ,BO的實例</p><p>  blobFieldName ,字段的屬性名</p><p>  is,填充的內容,為輸入流&l

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論