自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

解析Hibernate視圖實例

開發(fā) 后端
對Hibernate視圖進行映射,生成可持久化類對象。注意:在Hibernate3之后才支持對Hibernate視圖的操作,Hibernate2并不支持如果你的項目中是使用Hibernate2就沒必要往下看了。

本文主要講Hibernate視圖的創(chuàng)建,分析,查詢。下面是具體的分析以及相應(yīng)的代碼。

開發(fā)環(huán)境:Eclipse3.2+MyEclipse5.01GA;框架使用:Struts+Spring+Hibernate
在Employee數(shù)據(jù)庫中有三個表:EmployeeInfo(員工信息表)、Depts(部門表)、Business(職務(wù)表)
EmployeeInfo表結(jié)構(gòu):

  1. emp_id主鍵  
  2. emp_name  
  3. emp_sex  
  4. emp_age  
  5. emp_dept存儲dept_id  
  6. emp_business存儲business_id  
  7. emp_address  
  8.  
  9. Depts:  
  10. dept_id主鍵  
  11. dept_name  
  12.  
  13. Business:  
  14. business_id主鍵  
  15. business_name 

在應(yīng)用程序中需要查詢員工的詳細信息,包括部門和職務(wù)名稱,要完成這樣的查詢需要較長較復(fù)雜的SQL代碼,與其在程序中書寫代碼不如在數(shù)據(jù)庫建立一個視圖來簡化程序的操作,其SQL代碼如下:

  1. create view employeedetialinfo AS (select e.emp_id,e.emp_name,e.emp_sex,e.emp_age,d.dept_name,  
  2. b.business_name,e.emp_address from employeeinfo e,depts d,business b where e.emp_dept=d.dept_id and e.emp_business=b.business_id;  

以上的SQL語句創(chuàng)建了一個名為employeedetialinfo的視圖。現(xiàn)在需要用對Hibernate視圖進行映射,生成可持久化類對象。注意:在Hibernate3之后才支持對視圖的操作,Hibernate2并不支持如果你的項目中是使用Hibernate2就沒必要往下看了。

在Eclipse中切到MyEclipse DataBase Explorer(數(shù)據(jù)庫瀏覽視圖)中打開連接,找到Employee表,選擇下面的View子節(jié)點,可以看到一個名為employeedetialinfo的視圖,鼠標右鍵點擊它,選擇“Hibernate Reverse Engineering…”,設(shè)置了包路徑后,依次鉤選“Hibernate Mapping File”、“Java Data Object”(取消鉤選“Create abstract class”)以及“Java Data Access Object(DAO)”,在“Java Data Access Object(DAO)”下會自動鉤選“Generate precise findby methods”,以及選擇“Spring DAO”選項,使用“Spring DAO”后,在DAO類里轉(zhuǎn)而使用了HibernateTemplate對象來操作數(shù)據(jù)庫,可以免去事務(wù)管理;這樣就生成完持久化類,需要注意的是生成Hibernate視圖映射和生成表映射不一樣,因為視圖是沒有主鍵的,Hibernate就將視圖結(jié)構(gòu)本身做為ID主鍵,所以你可看到生成出來的文件有四個,分別是

  1. Employeedetialinfo.hbm.xml(映射文件)  
  2. Employeedetialinfo.java(持久化類文件)  
  3. EmployeedetialinfoId.java(視圖的數(shù)據(jù)結(jié)構(gòu)類)  
  4. EmployeedetialinfoDAO.java(DAO:Data Access Object用來簡化數(shù)據(jù)操作的類,常用的添加、刪除、更新、查詢都可以在這個類里得到快速的實現(xiàn)) 

如果對表進行映射是沒有EmployeedetialinfoId這個類文件的。

在Action中的處理代碼是這樣的:

  1. public class EmployeeDetialAction extends ActionSupport {  
  2.     /*  
  3.      * Generated Methods  
  4.      */  
  5.  
  6.     /**   
  7.      * Method execute  
  8.      * @param mapping  
  9.      * @param form  
  10.      * @param request  
  11.      * @param response  
  12.      * @return ActionForward  
  13.      */  
  14.     public ActionForward execute(ActionMapping mapping, ActionForm form,  
  15.             HttpServletRequest request, HttpServletResponse response) {          
  16.         String empId=request.getParameter("id");//獲得頁面?zhèn)鬟f的員工編號  
  17.         EmployeedetialinfoDAO empInfoDAO=EmployeedetialinfoDAO 
  18.                                         .getFromApplicationContext(getWebApplicationContext());  
  19.         List list=empInfoDAO.findByProperty("id.empId", empId);  
  20.         Employeedetialinfo emp=(Employeedetialinfo)(list.get(0));  
  21.         EmployeedetialinfoId empempInfo=emp.getId();  
  22.         request.setAttribute("empinfo", empInfo);  
  23.         return mapping.findForward("EmployeeDetial");  
  24.     }  
  25. }  

在實際應(yīng)用中,我們需要根據(jù)一個已知的員工ID來得到他的詳細信息,之前我使用empInfoDAO.findById方法,這個方法傳遞進去的參數(shù)是一個EmployeedetialinfoId對象,我實際化了EmployeedetialinfoId類后再setEmpId,得出來的結(jié)果都是Nullpoint;整整找了快一個月的資料都沒能找出個所以然;后來我試了findByProperty方法,它在DAO類里的定義是這樣的:

  1. public List findByProperty(String propertyName, Object value) 

第一個參數(shù)是類里的屬性名,第二個參數(shù)是值;需要注意的是如果在設(shè)置參數(shù)的時候直接傳empId這個屬性將會報錯,提示找不到這個屬性,而是需要在empId前面加上父類名Id,即"id.empId",這個ID是何許人也?它的定義就在Employeedetialinfo.hbm.xml映射文件里

  1. <composite-id name="id" class="com.terry.hibernate.modal.EmployeedetialinfoId">。  

以上的操作就完成了對Hibernate視圖的查詢,小小經(jīng)驗,希望對您有用。

【編輯推薦】

  1. Hibernate入門學(xué)習(xí)寶典
  2. Hibernate屬性簡單分析
  3. Struts-Spring-Hibernate案例
  4. 簡述Hibernate配置連接池
  5. 對Hibernate中g(shù)et()與load()不同點分析
責(zé)任編輯:仲衡 來源: blogjava
相關(guān)推薦

2009-09-23 17:05:52

Hibernate S

2009-09-27 16:21:22

Hibernate C

2009-09-24 10:06:42

Hibernate實例

2009-09-23 17:18:16

Hibernate S

2009-09-22 08:39:59

Hibernate F

2009-09-22 10:09:21

Hibernate S

2009-09-23 10:28:49

使用Hibernate

2009-06-18 09:14:08

Hibernate H

2009-06-12 15:09:01

Hibernate優(yōu)化

2009-06-16 16:27:22

Hibernate優(yōu)化

2009-06-17 16:22:45

Hibernate連接

2009-09-22 10:50:04

Hibernate c

2012-02-14 15:51:13

JavaHibernate

2009-09-22 09:55:58

Hibernate實例

2009-06-30 14:02:00

hibernate入門MyEclipse開發(fā)

2009-06-30 16:55:19

2009-09-23 15:37:52

Hibernate 原

2009-09-24 13:25:58

Hibernate m

2009-06-11 14:40:59

Hibernate分頁Hibernate查詢

2011-07-22 17:24:46

iPhone 視圖
點贊
收藏

51CTO技術(shù)棧公眾號