Eclipse快速上手EJB -- 3. 设计一对一的双向关系的CMR

一、设计实体Bean :UserInfoBean
 
1. 建立主体部分:
 
●  在 CMP_Sample 项目中,右击“src” ->新建 ->Lomboz EJB Creation Wizard :
· 包(K) :javamxj.ejb.cmp
· 名称(M): UserInfo
· EJB Type: 选择 Container Managed Entity EJB
   点击下一步。
 
● Schema Name: UserInfoSchema
   Table Name: UserInfoTable
 
增加一个 email 栏:
· Field: email
· Field Type: java.lang.String
· Database Column: 电子邮件
· SQL Type: varchar
  并且使它成为主键。 
 
同样,再增加一个 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.lang.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
 
效果如下,最后点击完成。
Eclipse快速上手EJB -- 3. 设计一对一的双向关系的CMR_第1张图片
 
 
注意:如上篇文章一样,将生成代码中的 sql-type="varchar" 改写成 sql-type="varchar(xy)" ,xy是一个合适的VARCHAR 的位数。
 
 
  2. 完成 ejbCreate 和 ejbPostCreate 方法:
Eclipse快速上手EJB -- 3. 设计一对一的双向关系的CMR_第2张图片
 
3. 在类标记中加入以下标记。
 
 
4. ejb.select 方法
 
  · 右击 UserInfoBean ->J2EE ->Add  Select Method (JBoss-IDE: 如果不清楚如何调出的,看上篇文章)
Eclipse快速上手EJB -- 3. 设计一对一的双向关系的CMR_第3张图片
 
Eclipse快速上手EJB -- 3. 设计一对一的双向关系的CMR_第4张图片
 
·如图,点击“完成”后生成的代码,需要手动添加一条返回语句。
 
 
5. 将 UserInfoBean 加入到 cmpEJB 模块中,然后 lomboz -> Generate EJB Classes
如下图,会生成6个文件,其中 UserInfoValue.java 是 “@ejb.value-object”标记生成的值对象。
 
6. 添加一个抽象方法来调用值对象。
 
 
 
7. 重点建立 UserInfoBean 与 UserBean 的一对一的双向关系:
 
·右击 UserInfoBean ->J2EE ->Add  CMR Relationship :
 
· 点击"完成"后,生成如下代码(红框中的语句需要手工添加):
 
·切换到 UserBean.java: 
右击 UserBean ->J2EE ->Add  CMR Relationship : Eclipse快速上手EJB -- 3. 设计一对一的双向关系的CMR_第5张图片
 
·点击"完成"后,生成如下代码(红框中的语句需要手工添加):
Eclipse快速上手EJB -- 3. 设计一对一的双向关系的CMR_第6张图片 
 
Ok,再次  Generate EJB Classes ,如果一切正常,再进行下一步。
(你可以看看在 ejb-jar.xml 和 jbosscmp-jdbc.xml 文件中生成的代码,加深理解)。
 

二、在UserManagementBean中添加业务方法

1. 增加一个 UserInfoLocalHome 的变量 userHome,并将它放入 ejbCreate 和 ejbPassivate 方法中。
Eclipse快速上手EJB -- 3. 设计一对一的双向关系的CMR_第7张图片 
 
2. 依次增加以下几个业务方法。
   关于如何添加,如果要自己输入,可以利用 JBoss-IDE 带的 Add Business Method(看上篇文章);
   或者简单的复制一下我完成好的代码。
   这几个方法都很简单,也就不细说了,很容易读懂。
Eclipse快速上手EJB -- 3. 设计一对一的双向关系的CMR_第8张图片
 
 
 
Eclipse快速上手EJB -- 3. 设计一对一的双向关系的CMR_第9张图片
 
Eclipse快速上手EJB -- 3. 设计一对一的双向关系的CMR_第10张图片
 
Eclipse快速上手EJB -- 3. 设计一对一的双向关系的CMR_第11张图片
 
 
 
   好了,保存, Generate EJB Classes,启动MySql(启动后,先把上篇文章中建立在cmp_sample库中的 usertable表删除掉。), 启动JBoss服务器, Deploy Module 。
如果一切正常,则会在 cmp_sample 库中自动建立两个表:usertable 和 userinfotable 
Eclipse快速上手EJB -- 3. 设计一对一的双向关系的CMR_第12张图片
·由于ejb.select 方法需要通过 Home 接口才能间接使用,所以:
 右击 UserInfoBean ->J2EE ->Add  Home Method
 
三、创建客户端

Eclipse快速上手EJB -- 3. 设计一对一的双向关系的CMR(1)

Eclipse快速上手EJB -- 3. 一对一的双向关系的CMR(2)

1. 右击 src 文件夹 ->新建 ->Lomboz EJB Test Client  Wizard:
Eclipse快速上手EJB -- 3. 设计一对一的双向关系的CMR_第13张图片
 
 
2. 修改生成的 CMPClient2.java,调用UserManagementBean中的方法。
 
2. 先在testBean()方法体外建立两个static方法,简化代码调用。
   //  创建用户
  public static void createUsers(UserManagement userMgmt)
      throws RemoteException, CreateException {
    System.out.println( "向UserInfo表中添加数据");
    userMgmt.addUser( "[email protected]", "密码1", "王一",
        "Engineering", "111-1212", 22, 2000);
    userMgmt.addUser( "[email protected]", "密码2", "王二",
        "Marketing", "222-1213",40, 4000);
    userMgmt.addUser( "[email protected]", "密码3", "张三",
        "IT", "1688888", 32, 2800);
    userMgmt.addUser( "[email protected]", "密码4", "李四",
        "Sales", "1288888", 28, 2700);
    userMgmt.addUser( "[email protected]", "密码5", "朱王五",
        "Sales", "1588888", 38, 4500);
    userMgmt.addUser( "[email protected]", "分享Java快乐", "MXJ",
        "IT", "1788888", 26, 2900);
  }

  //   输出ArrayList
  private static void printList(ArrayList list) {
    Iterator i = list.iterator();
    while (i.hasNext()) {
      Object details = ( Object) i.next();
      System.out.println(details.toString());
    }
    System.out.println( "");
  }
 
 
3. 然后,将testBean()方法体内的 myBean 改成 userMgmt,再向表中添加数据及显示数据。如下,斜体的即是改动部分。
public void testBean() {

    try {
      javamxj.ejb.cmp.UserManagement userMgmt = getHome().create();
     
      createUsers(userMgmt);
     
      System.out.println("显示所有用户");
      printList(userMgmt.getUsers());
运行程序,则控制台输出如下:
Eclipse快速上手EJB -- 3. 设计一对一的双向关系的CMR_第14张图片
 
 
4. 将“createUsers(userMgmt);”语句注释掉,调用密码验证及改变用户姓名的方法。
 
      //createUsers(userMgmt);      
      System.out.println( "显示所有用户");
      printList(userMgmt.getUsers());
     

      boolean login = false;
      login = userMgmt.verifyPassword("[email protected]", "分享Java快乐");
      System.out.println("密码验证: " + login);

     System.out.println("改变用户[email protected]的名字");
      userMgmt.changeName("[email protected]","Hello");
运行程序,则会发现 javamxj 的姓名已被更改为 Hello:
Eclipse快速上手EJB -- 3. 设计一对一的双向关系的CMR_第15张图片
 
5. 继续调用按年龄查询用户的方法:
      System.out.println("采用 ejb.finder 输出大于30的用户");
      printList(userMgmt.getUserByAge1(30));

      System.out.println("采用 ejb.select 输出年龄大于30的用户");
      printList(userMgmt.getUserByAge2(30));
输出:
 
6.继续调用通过ValueObject输出用户的方法:
      System.out.println("通过 ValueObject 输出用户信息:");
      UserInfoValue[] users = userMgmt.getUsersInfo();
      for (int index = 0; index < users.length; index++) {
        UserInfoValue user = users[index];
        System.out.println("用户 " + user.getEmail() + " 的年龄:"+ user.getAge());
      }
输出:
 
 
7. 继续调用通过姓名查询用户的方法:
  System .out.println("输出姓王的用户");
  printList(userMgmt.getUsersByName("王%"));
  System.out.println("输出姓名中含有王字的用户");
  printList(userMgmt.getUsersByName("%王%"));
输出:
Eclipse快速上手EJB -- 3. 设计一对一的双向关系的CMR_第16张图片
 
8. 删除一个用户,由于已经设置了级联删除的标记,所以虽然调用的方法是UserBean中的方法,但仍然会同时删除UserInfoBean中相关的数据。
//  删除一个用户
userMgmt.removeUser([email protected]);
 
查看数据表,会发现已经同时删除了usertable和userinfotable中关于的“ [email protected]”数据。
 
 
 
好了,这个算是讲完了。欲知后事如何,且听下回分解。

你可能感兴趣的:(Eclipse快速上手EJB -- 3. 设计一对一的双向关系的CMR)