双向一对多映射
two-way
开发要求:
根据数据表的结构进行简单java类的转换:
要求实现如下的输出信息:
可以根据课程取得全部参与此课程用户的信息
输出课程信息:
输出参与此课程用户的信息以及考试成绩
用户可以取得自己所参加的课程信息
输出某一个用户的信息
输出该用户所参加的所有课程信息以及对应的考试成绩
关系上来讲:一个用户可以参加多门课程,一门课程可以有多个用户参加,每个用户在每个课程内都会有一个成绩
此时最麻烦的问题在于用户-课程关系表中除了关联字段之外,还包含有其他字段,这样的表一定要作为一个实体类出现
所以现在需要定义有三个类
第一步:先完成基本字段
classUser{privateString userid:privateString name:publicUser(String userid,String name){this.userid =userid:this.name =name:
}publicString getlnfo(){return "用户编号:"+this.userid+",姓名"+this.name:
}
}classCourse{private intcid:privateString title:private intnum:privateString note:public Course(int cid,String title,intnum,String note){this.cid =cid:this.title =title:this.num =num:this.note =note:
}publicString getlnfo(){return "课程编号:"+this.cid+",名称:"+this.title+",课时:"+this.num+",简介:"+this.note:
}
}public classTwoWay{public static voidmain(String args[]){
}
}
第二步:进行字段关联的时候都是以外键为主
为了可以进行关联,需要引入一个新的类:要保存用户,课程等信息的联系
classUser{privateString userid;privateString name;publicUser(String userid,String name){this.userid =userid;this.name =name;
}publicString getlnfo(){return "用户编号:"+this.userid+",姓名"+this.name;
}
}classCourse{private intcid;privateString title;private intnum;privateString note;public Course(int cid,String title,intnum,String note){this.cid =cid;this.title =title;this.num =num;this.note =note;
}publicString getlnfo(){return "课程编号:"+this.cid+",名称:"+this.title+",课时:"+this.num+",简介:"+this.note;
}publicCourse getCourse(){return this.course;
}publicUser getUser(){return this.user;
}
}classUserCourse{privateUser user;privateCourse course;privateString note;private doublescore;public UserCourse(User user,Course course,String note,doublescore){this.user =user;this.course =course;this.note =note;this.score =score;
}
}public classTwoWay{public static voidmain(String args[]){
}
}
第三步:程序测试
classUser{privateString userid;privateString name;privateUserCourse ucs[];publicUser(String userid,String name){this.userid =userid;this.name =name;
}public voidsetUcs(UserCourse ucs[]){this.ucs =ucs;
}publicUserCourse[] getUcs(){return this.ucs;
}publicString getlnfo(){return "用户编号:"+this.userid+",姓名"+this.name;
}
}classCourse{private intcid;privateString title;private intnum;privateString note;privateUserCourse ucs[];public Course(int cid,String title,intnum,String note){this.cid =cid;this.title =title;this.num =num;this.note =note;
}public voidsetUcs(UserCourse ucs[]){this.ucs =ucs;
}publicUserCourse[] getUcs(){return this.ucs;
}publicString getlnfo(){return "课程编号:"+this.cid+",名称:"+this.title+",课时:"+this.num+",简介:"+this.note;
}
}classUserCourse{privateUser user;privateCourse course;privateString note;private doublescore;public UserCourse(User user,Course course,String note,doublescore){this.user =user;this.course =course;this.note =note;this.score =score;
}public doublegetScore(){return this.score;
}publicCourse getCourse(){return this.course;
}publicUser getUser(){return this.user;
}
}public classTwoWay{public static voidmain(String args[]){//第一步:设置类与类之间的关系//1.定义单独的类对象
User ua = new User("zhangsan","张三");
User ub= new User("lisi","李四");
User uc= new User("wangwu","王五");
Course c1= new Course(1,"Oracle",50,"-");
Course c2= new Course(2,"java",300,"-");//2.设置彼此的关系
UserCourse uca = new UserCourse(ua,c1,"暂无评价",90.0);
UserCourse ucb= new UserCourse(ua,c2,"暂无评价",91.0);
UserCourse ucc= new UserCourse(ub,c1,"暂无评价",92.0);
UserCourse ucd= new UserCourse(uc,c1,"暂无评价",93.0);
UserCourse uce= new UserCourse(uc,c2,"暂无评价",94.0);// ua.setUcs(newUserCourse[]{uca,ucb});
ub.setUcs(newUserCourse[]{ucc});
uc.setUcs(newUserCourse[]{ucd,uce});
c1.setUcs(newUserCourse[]{uca,ucc,ucd});
c2.setUcs(newUserCourse[]{ucb,uce});//第二步:取得数据
System.out.println(c1.getlnfo()); //输出一个课程信息
for(int x = 0;x
System.out.println("\t|-【参与用户】 "+c1.getUcs()[x].getUser().getlnfo()+",考试成绩"+c1.getUcs()[x].getScore());
}
System.out.println("*******************************************");
System.out.println(ua.getlnfo());for(int x = 0;x
System.out.println("\t|-【参与用户】 "+ua.getUcs()[x].getCourse().getlnfo()+",考试成绩"+ua.getUcs()[x].getScore());
}
}
}
本程序与之前的代码相比,唯一麻烦的地方在于中间的关系表上的其他字段
代码链是本次讲解的重点所在
不晕的方法(笨方法容易理解的方法)
System.out.println(ua.getlnfo());
UserCourse uct[]=ua.getUcs();for(int x = 0;x
Course c =uct[x].getCourse();
System.out.println("\t|-【参与用户】 "+c.getlnfo()+",考试成绩"+uct[x].getScore());
}