




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、14.1 數(shù)據(jù)庫表關(guān)系數(shù)據(jù)庫表關(guān)系 1. 關(guān)系基數(shù) 2. CMP和BMP的不同點(diǎn) 3. 用BMP實(shí)現(xiàn)一對一關(guān)系 4.用BMP實(shí)現(xiàn)一對多關(guān)系 5. 用BMP實(shí)現(xiàn)多對多關(guān)系 6.用CMP實(shí)現(xiàn)例子 7. 用CMP實(shí)現(xiàn)一對一關(guān)系 8.用CMP實(shí)現(xiàn)一對多關(guān)系 9. 用CMP實(shí)現(xiàn)多對多關(guān)系1. 關(guān)系基數(shù) 關(guān)系基數(shù)有三種形式: 1:1關(guān)系 1:N關(guān)系 M:N關(guān)系CMP(Container-Managed Persistence)和CMR(Container-Managed Relationships) 2. CMP和BMP的不同點(diǎn) BMP需要自己在Bean的編碼中明確實(shí)現(xiàn)關(guān)系。 CMP是通過在部署描述文件中
2、聲明Bean之間的關(guān)系,容器根據(jù)“聲明”,自動在子類中生成處理關(guān)系的代碼。3. 用BMP實(shí)現(xiàn)一對一關(guān)系 OrderPKOrderNameShipment12345Software Order10101ShipmentPKCityZipCode10101Austin78727Order:Shipment:3. 用BMP實(shí)現(xiàn)一對一關(guān)系 public class OrderBean implements EntityBean private String orderPK;private String orderName;private Shipment shipment;public Shipmen
3、t getShipment() return shipment;public void setShipment(Shipment s) this.shipment=s;3. 用BMP實(shí)現(xiàn)一對一關(guān)系 public void ejbLoad() /1:SQL SELECT Order/取出Order表中的Shipment/2.使用JNDI API查找ShipmentHome對象/3.調(diào)用ShipmentHome.findByPrimaryKey();/傳入的參數(shù)是Order表中的Shipment,從而得到Shipment的EJB對象3. 用BMP實(shí)現(xiàn)一對一關(guān)系 public void ejbSto
4、re() /1.調(diào)用Shipment.getPrimaryKey(),/取出當(dāng)前Shipment對象的主鍵類/2:SQL UPDATE Order4. 用BMP實(shí)現(xiàn)一對多關(guān)系 CompanyPKName12345The Middleware CompanyEmployeePKNameSexCompany20202EdM1234520203FloydM12345Company:Employee:4. 用BMP實(shí)現(xiàn)一對多關(guān)系 public class CompanyBean implements EntityBean private String companyPK;private String
5、companyName;private Vector employees;public Collection getEmployees() return employees;public void setEmployees(Collection e) this.employees=e;4. 用BMP實(shí)現(xiàn)一對多關(guān)系 public void ejbLoad() /1:SQL SELECT Company/2.使用JNDI API查找EmployeeHome對象/3.調(diào)用EmployeeHome.findByCompany(companyPK);public void ejbStore() /1:S
6、QL UPDATE Company5. 用BMP實(shí)現(xiàn)多對多關(guān)系 StudentPKNameCourse10101Joe Student2020210101Joe Student2020310102Smith Student2020210102Smith Student20203Student:5. 用BMP實(shí)現(xiàn)多對多關(guān)系 CoursePKNameStudent20202EJB for Architects1010120202EJB for Architects1010220203JSP and Servlets1010120203JSP and Servlets10102Course:5. 用
7、BMP實(shí)現(xiàn)多對多關(guān)系 public class StudentBean implements EntityBean private String studentPK;private String name;private Vector courses;public Collection getCourses() return courses;public void setCourses(Collection e) this.courses=e;.public void ejbLoad() /1:SQL SELECT Student/2.使用JNDI API查找CourseHome對象/3.調(diào)用
8、CourseHome.findByStudent(studentPK);public void ejbStore() /1:SQL UPDATE Student5. 用BMP實(shí)現(xiàn)多對多關(guān)系 public class CourseBean implements EntityBean private String coursePK;private String name;private Vector students;public Collection getStudents() return students;public void setStudents(Collection e) this.
9、students=e;.public void ejbLoad() /1:SQL SELECT Course/2.使用JNDI API查找StudentHome對象/3.調(diào)用StudentHome.findByCourse(coursePK);public void ejbStore() /1:SQL UPDATE Course6. 用CMP實(shí)現(xiàn)例子 基于在線內(nèi)容管理系統(tǒng)的假想認(rèn)證子系統(tǒng)的示例,它具有以下這些功能: 將用戶登錄到系統(tǒng) 認(rèn)證用戶處于某種角色 允許將用戶組織成組,從而允許進(jìn)行組操作 存儲諸如地址和聯(lián)系信息這樣的用戶信息 管理角色、用戶和組 6. 用CMP實(shí)現(xiàn)例子 圖圖 1 1:Us
10、erUser、GroupGroup、Role Role 和和 UserInfo UserInfo 實(shí)體實(shí)體6. 用CMP實(shí)現(xiàn)例子系統(tǒng)中的實(shí)體的概述表明有四個截然不同的實(shí)體:User、Group、Role 和 UserInfo。這些實(shí)體有下面這三種關(guān)系: User 與 Role 相關(guān)聯(lián)(多對多) 一個 User 有一條 UserInfo(一對一) 一個 Group 有多個 User(一對多)6. 用CMP實(shí)現(xiàn)例子表名:User字段名類型說明email(主鍵)VARCHAR(64)Email地址passwordVARCHAR(64)密碼6. 用CMP實(shí)現(xiàn)例子表名:UserInfo字段名類型說明em
11、ail(主鍵)VARCHAREmail地址nameVARCHAR姓名deptVARCHAR組別workPhoneVARCHAR工作電話ageINTEGER年齡salaryINTEGER薪水6. 用CMP實(shí)現(xiàn)例子表名:Group字段名類型說明name(主鍵)VARCHAR名稱description VARCHAR行業(yè)說明6. 用CMP實(shí)現(xiàn)例子表名:Role字段名類型說明name(主鍵)VARCHAR權(quán)限名稱description VARCHAR權(quán)限描述7. 用CMP實(shí)現(xiàn)一對一關(guān)系一、設(shè)計實(shí)體一、設(shè)計實(shí)體Bean :UserInfoBean 1. 建立主體部分:建立主體部分: 在 CMP_Samp
12、le 項(xiàng)目中,右擊“src” -新建 -Lomboz EJB Creation Wizard : 包(K) :javamxj.ejb.cmp 名稱(M): UserInfo EJB Type: 選擇 Container Managed Entity EJB 點(diǎn)擊下一步。 Schema Name: UserInfoSchema Table Name: UserInfoTable 增加一個 email 欄: Field: email Field Type: java.lang.String Database Column: 電子郵件 SQL Type: varchar 并且使它成為主鍵并且使它成為
13、主鍵。7. 用CMP實(shí)現(xiàn)一對一關(guān)系 同樣,再增加一個同樣,再增加一個 name 欄:欄: Field: name Field Type: java.lang.String Database Column: 姓名姓名 SQL Type: varchar 同樣,再增加一個同樣,再增加一個 dept 欄:欄: Field: dept Field Type: java.lang.String Database Column: 組別組別 SQL Type: varchar 同樣,再增加一個同樣,再增加一個 workPhone欄:欄: Field: workPhone Field Type: java.l
14、ang.String Database Column: 工作電話工作電話 SQL Type: varchar 同樣,再增加一個同樣,再增加一個 age 欄:欄: Field: age Field Type: java.lang.Integer Database Column: 年齡年齡 SQL Type: Integer 同樣,再增加一個同樣,再增加一個 salary 欄:欄: Field: salary Field Type: java.lang.Integer Database Column: 薪水薪水 SQL Type: Integer 。7. 用CMP實(shí)現(xiàn)一對一關(guān)系 效果如下,最后點(diǎn)擊
15、完成。效果如下,最后點(diǎn)擊完成。7. 用CMP實(shí)現(xiàn)一對一關(guān)系7. 用CMP實(shí)現(xiàn)一對一關(guān)系 2. 2. 完成完成 ejbCreate ejbCreate 和和 ejbPostCreate ejbPostCreate 方法:方法: 7. 用CMP實(shí)現(xiàn)一對一關(guān)系 3. 3. 在類標(biāo)記中加入以下標(biāo)記。在類標(biāo)記中加入以下標(biāo)記。7. 用CMP實(shí)現(xiàn)一對一關(guān)系 4. ejb.select 4. ejb.select 方法方法 右擊右擊 UserInfoBean -J2EE UserInfoBean -J2EE -Add Select Method-Add Select Method 7. 用CMP實(shí)現(xiàn)一對一關(guān)系
16、 由于ejb.Home 方法需要通過 Home Home 接口才能間接使用,所以: 右擊 UserInfoBean -J2EE -Add HomeHome Method 7. 用CMP實(shí)現(xiàn)一對一關(guān)系如圖,點(diǎn)擊“完成”后生成的代碼,需要手動添加一條返回語句。 7. 用CMP實(shí)現(xiàn)一對一關(guān)系5.5. 將將 UserInfoBean UserInfoBean 加入到加入到 cmpEJB cmpEJB 模塊模塊中,然后中,然后 lomboz lomboz Generate EJB Generate EJB Classes Classes 如下圖,如下圖,會生成會生成6 6個文件,其中個文件,其中 Use
17、rInfoValue.java UserInfoValue.java 是是 “ejb.value-ejb.value-objectobject”標(biāo)記生成的值標(biāo)記生成的值對象。對象。 7. 用CMP實(shí)現(xiàn)一對一關(guān)系6 6. 添加一個抽象方法來調(diào)用值對象。 7. 用CMP實(shí)現(xiàn)一對一關(guān)系7 . 7 . 重 點(diǎn) : 建 立重 點(diǎn) : 建 立 UserInfoBean 與與 UserBean 的一對的一對一 的 雙 向 關(guān)一 的 雙 向 關(guān)系 :系 : 右 擊右 擊 UserInfoBean - J 2 E E - A d d CMR Relationship : 7. 用CMP實(shí)現(xiàn)一對一關(guān)系點(diǎn)擊點(diǎn)擊 完
18、成完成 后,生成如下代碼(紅框中的語句需要后,生成如下代碼(紅框中的語句需要手工添加):手工添加): 7. 用CMP實(shí)現(xiàn)一對一關(guān)系切換到切換到 UserBean.javaUserBean.java: 右擊右擊 UserBean UserBean -J2EE -Add -J2EE -Add CMR CMR Relationship : Relationship : 7. 用CMP實(shí)現(xiàn)一對一關(guān)系點(diǎn)擊點(diǎn)擊 完成完成 后,生成如下代碼(紅框中的語句需要后,生成如下代碼(紅框中的語句需要手工添加):手工添加): 7. 用CMP實(shí)現(xiàn)一對一關(guān)系點(diǎn)擊點(diǎn)擊“完成完成”后,生成如下代碼(紅框中的語句需要手后,生成
19、如下代碼(紅框中的語句需要手工添加):工添加):OkOk,再次,再次 Generate EJB ClassesGenerate EJB Classes。 7. 用CMP實(shí)現(xiàn)一對一關(guān)系 二、在二、在UserManagementBeanUserManagementBean中添加業(yè)務(wù)方法中添加業(yè)務(wù)方法1. 1. 增加一個增加一個 UserInfoLocalHome UserInfoLocalHome 的變量的變量 userHomeuserHome,并將,并將它放入它放入 ejbCreate ejbCreate 和和 ejbPassivate ejbPassivate 方法中。方法中。 7. 用CMP
20、實(shí)現(xiàn)一對一關(guān)系2. 2. 依次增加以下幾個業(yè)務(wù)方法。依次增加以下幾個業(yè)務(wù)方法。 7. 用CMP實(shí)現(xiàn)一對一關(guān)系7. 用CMP實(shí)現(xiàn)一對一關(guān)系7. 用CMP實(shí)現(xiàn)一對一關(guān)系7. 用CMP實(shí)現(xiàn)一對一關(guān)系7. 用CMP實(shí)現(xiàn)一對一關(guān)系 保存,保存,Generate EJB ClassesGenerate EJB Classes,啟動,啟動JBossJBoss服務(wù)器,服務(wù)器, Deploy ModuleDeploy Module。啟動啟動MySqlMySql,如果一切正常,則會在數(shù)據(jù)庫中自動建立兩個,如果一切正常,則會在數(shù)據(jù)庫中自動建立兩個表:表:usertable usertable 和和 userinfo
21、tableuserinfotable 。7. 用CMP實(shí)現(xiàn)一對一關(guān)系 三、創(chuàng)建客戶端三、創(chuàng)建客戶端1. 1. 右擊右擊 src src 文件夾文件夾 -新建新建 -Lomboz EJB Test Client -Lomboz EJB Test Client Wizard:Wizard: 7. 用CMP實(shí)現(xiàn)一對一關(guān)系2. 2. 修改生成的修改生成的 CMPClient2.javaCMPClient2.java,調(diào)用,調(diào)用UserManagementBeanUserManagementBean中的方法。先在中的方法。先在testBean()testBean()方法體外建立方法體外建立兩個兩個sta
22、ticstatic方法,簡化代碼調(diào)用。方法,簡化代碼調(diào)用。7. 用CMP實(shí)現(xiàn)一對一關(guān)系 / 創(chuàng)建用戶創(chuàng)建用戶 public static void createUsers(UserManagement userMgmt) throws RemoteException, CreateException System.out.println(向向UserInfo表中添加數(shù)據(jù)表中添加數(shù)據(jù)); userMgmt.addUser(, 密碼密碼1, 王一王一, Engineering, 111-1212, 22, 2000); userMgmt.addUser(, 密碼密碼2, 王二王二, Marketi
23、ng, 222-1213,40, 4000); userMgmt.addUser(zhangsanbbb.ccc, 密碼密碼3, 張三張三, IT, 1688888, 32, 2800); userMgmt.addUser(lisibbb.ccc, 密碼密碼4, 李四李四, Sales, 1288888, 28, 2700); userMgmt.addUser(zhubbb.eee, 密碼密碼5, 朱王五朱王五, Sales, 1588888, 38, 4500); userMgmt.addUser(, 分享分享Java快樂快樂, MXJ, IT, 1788888, 26, 2900); 7.
24、 用CMP實(shí)現(xiàn)一對一關(guān)系 / / 輸出輸出ArrayListArrayList private static void printList(ArrayList list) private static void printList(ArrayList list) Iterator i = list.iterator(); Iterator i = list.iterator(); while (i.hasNext() while (i.hasNext() Object details = (Object) i.next(); Object details = (Object) i.next()
25、; System.out.println(details.toString(); System.out.println(details.toString(); System.out.println(); System.out.println(); 7. 用CMP實(shí)現(xiàn)一對一關(guān)系 3. 3. 然后,將然后,將testBean()testBean()方法體內(nèi)的方法體內(nèi)的 myBean myBean 改成改成 userMgmtuserMgmt,再向表中添加數(shù)據(jù)及顯示數(shù)據(jù)。再向表中添加數(shù)據(jù)及顯示數(shù)據(jù)。public void testBean() public void testBean() try tr
26、y javamxj.ejb.cmp.UserManagement userMgmt = javamxj.ejb.cmp.UserManagement userMgmt = getHome().create(); getHome().create(); createUsers(userMgmt); createUsers(userMgmt); System.out.println( System.out.println(顯示所有用戶顯示所有用戶);); printList(userMgmt.getUsers(); printList(userMgmt.getUsers(); 7. 用CMP實(shí)現(xiàn)一
27、對一關(guān)系運(yùn)行程序,則控制臺輸出如下:運(yùn)行程序,則控制臺輸出如下: 7. 用CMP實(shí)現(xiàn)一對一關(guān)系4. 將將“createUsers(userMgmt);”語句注釋掉,調(diào)用密碼驗(yàn)證及語句注釋掉,調(diào)用密碼驗(yàn)證及改變用戶姓名的方法。改變用戶姓名的方法。 /createUsers(userMgmt); System.out.println(顯示所有用戶顯示所有用戶); printList(userMgmt.getUsers(); boolean login = false; login = userMgmt.verifyPassword(, 分享分享Java快樂快樂); System.out.print
28、ln(密碼驗(yàn)證:密碼驗(yàn)證: + login); System.out.println(改變用戶改變用戶的名字的名字); userMgmt.changeName(,Hello); 7. 用CMP實(shí)現(xiàn)一對一關(guān)系運(yùn)行程序,則會發(fā)現(xiàn)運(yùn)行程序,則會發(fā)現(xiàn) javamxj javamxj 的姓名已被更改為的姓名已被更改為 HelloHello: 7. 用CMP實(shí)現(xiàn)一對一關(guān)系5. 5. 繼續(xù)調(diào)用按年齡查詢用戶的方法:繼續(xù)調(diào)用按年齡查詢用戶的方法: System.out.println(System.out.println(采用采用 ejb.finder ejb.finder 輸出大于輸出大于3030的用戶的用
29、戶);); printList(userMgmt.getUserByAge1(30); printList(userMgmt.getUserByAge1(30); System.out.println( System.out.println(采用采用 ejb.select ejb.select 輸出年齡大輸出年齡大于于3030的用戶的用戶);); printList(userMgmt.getUserByAge2(30); printList(userMgmt.getUserByAge2(30);7. 用CMP實(shí)現(xiàn)一對一關(guān)系輸出:輸出: 7. 用CMP實(shí)現(xiàn)一對一關(guān)系6.繼續(xù)調(diào)用通過繼續(xù)調(diào)用通過V
30、alueObject輸出用戶的方法:輸出用戶的方法: System.out.println(通過通過 ValueObject 輸出用戶信息:輸出用戶信息:); UserInfoValue users = userMgmt.getUsersInfo(); for (int index = 0; index -新建新建 - -Lomboz EJB Creation Wizard :Lomboz EJB Creation Wizard : 包(包(K K) :javamxj.ejb.cmpjavamxj.ejb.cmp 名稱(名稱(M M):): GroupGroup EJB Type EJB Ty
31、pe: 選擇選擇 Container Managed Entity EJBContainer Managed Entity EJB 點(diǎn)擊下一步。點(diǎn)擊下一步。 Schema Name: GroupSchemaSchema Name: GroupSchema Table Name: GroupTable Table Name: GroupTable 8. 用CMP實(shí)現(xiàn)一對多關(guān)系 增加一個增加一個 name name 欄:欄: Field: name Field: name Field Type: java.lang.String Field Type: java.lang.String Datab
32、ase Column: Database Column: 名稱名稱 SQL Type: varchar SQL Type: varchar 并且使它成為主鍵。并且使它成為主鍵。 同樣,再增加一個同樣,再增加一個 description description 欄:欄: Field: description Field: description Field Type: java.lang.String Field Type: java.lang.String Database Column: Database Column: 行業(yè)說明行業(yè)說明 SQL Type: varchar SQL Type
33、: varchar 8. 用CMP實(shí)現(xiàn)一對多關(guān)系效果如下,最后效果如下,最后點(diǎn)擊完成。點(diǎn)擊完成。8. 用CMP實(shí)現(xiàn)一對多關(guān)系2. 2. 完成完成 ejbCreate ejbCreate 和和 ejbPostCreate ejbPostCreate 方法:方法: 8. 用CMP實(shí)現(xiàn)一對多關(guān)系3. 3. 在類標(biāo)記中加入以下標(biāo)記:在類標(biāo)記中加入以下標(biāo)記: 8. 用CMP實(shí)現(xiàn)一對多關(guān)系4. 4. 增加一個增加一個Select methodSelect method和和Home methodHome method/ /* * * * Select method Select method* * ejb.
34、select ejb.select* * query = SELECT user.email FROM GroupSchema AS g, query = SELECT user.email FROM GroupSchema AS g, IN (g.users) AS user WHERE = ?1 IN (g.users) AS user WHERE = ?1 * * * */ /p u b l i c a b s t r a c t j a v a . u t i l . C o l l e c t i o n p u b l i c a b s t r a c
35、 t j a v a . u t i l . C o l l e c t i o n ejbSelectUserIDs(String groupName)ejbSelectUserIDs(String groupName) throws javax.ejb.FinderException; throws javax.ejb.FinderException; 8. 用CMP實(shí)現(xiàn)一對多關(guān)系4. 4. 增加一個增加一個Select methodSelect method和和Home methodHome method/ /* * * * Home method Home method* * thro
36、ws FinderException throws FinderException* * ejb.home-method view-type = local ejb.home-method view-type = local* */ /public java.util.ArrayList ejbHomeGetUserIDs(String public java.util.ArrayList ejbHomeGetUserIDs(String groupName)groupName) throws javax.ejb.FinderException throws javax.ejb.FinderE
37、xception r e t u r n ( j a v a . u t i l . A r r a y L i s t ) r e t u r n ( j a v a . u t i l . A r r a y L i s t ) ejbSelectUserIDs(groupName);ejbSelectUserIDs(groupName); 8. 用CMP實(shí)現(xiàn)一對多關(guān)系5. 5. 將將 GroupBean GroupBean 加入到加入到 cmpEJB cmpEJB 模塊中,然后模塊中,然后 lomboz -Generate EJB Classes lomboz -Generate EJB
38、 Classes 6. 6. 重點(diǎn):建立重點(diǎn):建立 GroupBean GroupBean 與與 UserBean UserBean 的一對多的雙的一對多的雙向聯(lián)系:向聯(lián)系: 右擊右擊 GroupBean -J2EE -Add CMR GroupBean -J2EE -Add CMR Relationship :Relationship : 8. 用CMP實(shí)現(xiàn)一對多關(guān)系8. 用CMP實(shí)現(xiàn)一對多關(guān)系 切換到切換到 UserInfoBean.javaUserInfoBean.java: 右擊右擊 UserInfoBean -J2EE -UserInfoBean -J2EE - Add CMR Re
39、lationship : Add CMR Relationship :8. 用CMP實(shí)現(xiàn)一對多關(guān)系8. 用CMP實(shí)現(xiàn)一對多關(guān)系 在在 UserInfoBean.java 中生成的代碼(需要手工添加中生成的代碼(需要手工添加jboss.relation):):/* Getter for CMR Relationship* erface-method view-type=local* ejb.relation name = GroupsHaveUserInfos* role-name = UserInfosInGroup* target-multiple = yes* jboss.r
40、elation * fk-column = 組別組別 * related-pk-field = name*/public abstract javamxj.ejb.cmp.GroupLocal getGroup();/* Setter for CMR Relationship* erface-method view-type=local*/public abstract void setGroup(javamxj.ejb.cmp.GroupLocal value); -Ok,再次,再次 Generate EJB Classes 8. 用CMP實(shí)現(xiàn)一對多關(guān)系 在在 UserInfo
41、Bean.java 中生成的代碼(需要手工添加中生成的代碼(需要手工添加jboss.relation):):/* Getter for CMR Relationship* erface-method view-type=local* ejb.relation name = GroupsHaveUserInfos* role-name = UserInfosInGroup* target-multiple = yes* jboss.relation * fk-column = 組別組別 * related-pk-field = name*/public abstract javam
42、xj.ejb.cmp.GroupLocal getGroup();/* Setter for CMR Relationship* erface-method view-type=local*/public abstract void setGroup(javamxj.ejb.cmp.GroupLocal value); -Ok,再次,再次 Generate EJB Classes 8. 用CMP實(shí)現(xiàn)一對多關(guān)系二、在二、在UserManagementBeanUserManagementBean中添加業(yè)務(wù)方法中添加業(yè)務(wù)方法增加一個增加一個 GroupLocalHome GroupLo
43、calHome 的變量的變量 groupHomegroupHome,并將它放入并將它放入 ejbCreate ejbCreate 和和 ejbPassivate ejbPassivate 方法中。方法中。1.1. 依次增加以下幾個業(yè)務(wù)方法。依次增加以下幾個業(yè)務(wù)方法。 8. 用CMP實(shí)現(xiàn)一對多關(guān)系 3.3.保存,保存,Generate EJB ClassesGenerate EJB Classes,啟動,啟動MySqlMySql, 啟動啟動JBossJBoss服務(wù)器,服務(wù)器, Deploy Module Deploy Module 。 一切正常,則會在一切正常,則會在 cmp_sample cm
44、p_sample 庫中自動建立一個表:庫中自動建立一個表:grouptablegrouptable。 8. 用CMP實(shí)現(xiàn)一對多關(guān)系 三、創(chuàng)建客戶端三、創(chuàng)建客戶端1. 1. 右擊右擊 src src 文件夾文件夾 -新建新建 -Lomboz EJB Test Client-Lomboz EJB Test Client Wizard: Wizard: 創(chuàng)建一個創(chuàng)建一個 CMPClient4.java CMPClient4.java 文件文件 2. 2. 修改生成的修改生成的 CMPClient4.javaCMPClient4.java,調(diào)用,調(diào)用UserManagementBeanUserMana
45、gementBean中的方法。中的方法。8. 用CMP實(shí)現(xiàn)一對多關(guān)系 3. 3. 運(yùn)行客戶端運(yùn)行客戶端控制臺輸出:控制臺輸出: 8. 用CMP實(shí)現(xiàn)一對多關(guān)系 數(shù)據(jù)庫中相對應(yīng)的表的改變:數(shù)據(jù)庫中相對應(yīng)的表的改變: 8. 用CMP實(shí)現(xiàn)一對多關(guān)系8. 用CMP實(shí)現(xiàn)一對多關(guān)系9. 用CMP實(shí)現(xiàn)多對多關(guān)系 public abstract class StudentBean implements EntityBean /成員變量在子類中實(shí)現(xiàn),定義為abstract型 public abstract Collection getCourses(); public abstract void setCours
46、es (Collection courses); public void ejbLoad() /不需要任何代碼 public void ejbStore() /不需要任何代碼9. 用CMP實(shí)現(xiàn)多對多關(guān)系 public abstract class CourseBean implements EntityBean /成員變量在子類中實(shí)現(xiàn),定義為abstract型 public abstract Collection getStudents(); public abstract void setStudents(Collection students); public void ejbLoad() /不需要任何代碼 public void ejbStore() /不需要任何代碼9. 用CMP實(shí)現(xiàn)多對多關(guān)系一、設(shè)計實(shí)體一、設(shè)計實(shí)體Bean Bean :RoleBeanRoleBean 1. 建立主體部分: 在 CMP_Sample 項(xiàng)目中,右擊“src” -新建 -Lomboz EJB Creation
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 友情聯(lián)誼活動方案
- 升旗活動策劃方案
- 名校五四系列活動方案
- 參觀酒店室內(nèi)活動方案
- 吉林團(tuán)建拓展活動方案
- 醫(yī)院健步活動方案
- 單位工會組織活動方案
- 單位人員晨讀活動方案
- 古籍展廳活動方案
- 雙十一服裝現(xiàn)場活動方案
- 注水泵工(中級)技能鑒定理論考試題及答案
- 2023春國開精益生產(chǎn)終考題庫及答案
- 4.1中國特色社會主義進(jìn)入新時代 課件高中政治統(tǒng)編版必修一中國特色社會主義-3
- 安徽省秸稈資源潛力和綜合利用現(xiàn)狀分析
- 保潔服務(wù) 投標(biāo)方案(技術(shù)標(biāo))
- 2024年國企采購商品房合同模板
- 湖南省長沙2024年七年級下冊生物期末試卷附答案
- 新材料產(chǎn)業(yè)研發(fā)與產(chǎn)業(yè)化應(yīng)用實(shí)施方案案
- 3.6.3關(guān)門車課件講解
- 2024年小學(xué)四年級下冊數(shù)學(xué)期末測試卷附完整答案【典優(yōu)】
- 養(yǎng)老院老人走失免責(zé)協(xié)議書
評論
0/150
提交評論