双向一对多映射
    two-way

    开发要求:
        根据数据表的结构进行简单java类的转换:
        要求实现如下的输出信息:
            可以根据课程取得全部参与此课程用户的信息
                输出课程信息:
                输出参与此课程用户的信息以及考试成绩
            用户可以取得自己所参加的课程信息
                输出某一个用户的信息
                输出该用户所参加的所有课程信息以及对应的考试成绩
        关系上来讲:一个用户可以参加多门课程,一门课程可以有多个用户参加,每个用户在每个课程内都会有一个成绩
        此时最麻烦的问题在于用户-课程关系表中除了关联字段之外,还包含有其他字段,这样的表一定要作为一个实体类出现
        所以现在需要定义有三个类
        第一步:先完成基本字段

class User{
private String userid:
private String name:
public User(String userid,String name){
this.userid = userid:
this.name = name:
}
public String getlnfo(){
return "用户编号:"+this.userid
+",姓名"+this.name:
}
}
class Course{
private int cid:
private String title:
private int num:
private String note:
public Course(int cid,String title,int num,String note){
this.cid = cid:
this.title = title:
this.num = num:
this.note = note:
}
public String getlnfo(){
return "课程编号:"+this.cid
+",名称:"+this.title
+",课时:"+this.num
+",简介:"+this.note:
}
}
public class TwoWay{
public static void main(String args[]){ }
}

第二步:进行字段关联的时候都是以外键为主
            为了可以进行关联,需要引入一个新的类:要保存用户,课程等信息的联系

class User{
private String userid;
private String name;
public User(String userid,String name){
this.userid = userid;
this.name = name;
}
public String getlnfo(){
return "用户编号:"+this.userid
+",姓名"+this.name;
}
}
class Course{
private int cid;
private String title;
private int num;
private String note;
public Course(int cid,String title,int num,String note){
this.cid = cid;
this.title = title;
this.num = num;
this.note = note;
}
public String getlnfo(){
return "课程编号:"+this.cid
+",名称:"+this.title
+",课时:"+this.num
+",简介:"+this.note;
}
public Course getCourse(){
return this.course;
}
public User getUser(){
return this.user;
}
}
class UserCourse{
private User user;
private Course course;
private String note;
private double score;
public UserCourse(User user,Course course,String note,double score){
this.user = user;
this.course = course;
this.note = note;
this.score = score;
}
}
public class TwoWay{
public static void main(String args[]){ }
}

第三步:程序测试

class User{
private String userid;
private String name;
private UserCourse ucs[];
public User(String userid,String name){
this.userid = userid;
this.name = name;
}
public void setUcs(UserCourse ucs[]){
this.ucs = ucs;
}
public UserCourse[] getUcs(){
return this.ucs;
}
public String getlnfo(){
return "用户编号:"+this.userid
+",姓名"+this.name;
}
}
class Course{
private int cid;
private String title;
private int num;
private String note;
private UserCourse ucs[];
public Course(int cid,String title,int num,String note){
this.cid = cid;
this.title = title;
this.num = num;
this.note = note;
}
public void setUcs(UserCourse ucs[]){
this.ucs = ucs;
}
public UserCourse[] getUcs(){
return this.ucs;
}
public String getlnfo(){
return "课程编号:"+this.cid
+",名称:"+this.title
+",课时:"+this.num
+",简介:"+this.note;
} }
class UserCourse{
private User user;
private Course course;
private String note;
private double score;
public UserCourse(User user,Course course,String note,double score){
this.user = user;
this.course = course;
this.note = note;
this.score = score;
}
public double getScore(){
return this.score;
}
public Course getCourse(){
return this.course;
}
public User getUser(){
return this.user;
}
}
public class TwoWay{
public static void main(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(new UserCourse[]{uca,ucb});
ub.setUcs(new UserCourse[]{ucc});
uc.setUcs(new UserCourse[]{ucd,uce});
c1.setUcs(new UserCourse[]{uca,ucc,ucd});
c2.setUcs(new UserCourse[]{ucb,uce});
// 第二步:取得数据
System.out.println(c1.getlnfo()); // 输出一个课程信息
for(int x = 0;x<c1.getUcs().length;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<ua.getUcs().length;x++){// 都是UserCourse对象
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<uct.length;x++){// 都是UserCourse对象
Course c = uct[x].getCourse();
System.out.println("\t|-【参与用户】 "+c.getlnfo()+",考试成绩"+uct[x].getScore());
}

菜鸡的Java笔记 - java 双向一对多映射的更多相关文章

  1. Java 笔记 —— java 和 javac

    Java 笔记 -- java 和 javac h2{ color: #4ABCDE; } a{ text-decoration: none !important; } a:hover{ color: ...

  2. 菜鸡的Java笔记 - java 断言

    断言:assert (了解)        所谓的断言指的是在程序编写的过程之中,确定代码执行到某行之后数据一定是某个期待的内容        范例:观察断言 public class Abnorma ...

  3. 菜鸡的Java笔记 - java 正则表达式

    正则表达式 RegularExpression        了解正则表达式的好处        正则表达式的基础语法        正则表达式的具体操作            content (内容 ...

  4. 菜鸡的Java笔记 - java 线程常用操作方法

    线程常用操作方法        线程的命名操作,线程的休眠,线程的优先级            线程的所有操作方法几乎都在 Thread 类中定义好了            线程的命名和取得      ...

  5. 菜鸡的Java笔记 - java 访问控制权限

    java中四种访问控制权限的使用                内容            在java里面一共定义有四个权限,按照由小到大的顺序:private<defaule<prote ...

  6. 菜鸡的Java笔记 - java 常用类库

    CommonClassLibrary 常用类库        定时调度            定时调度指的是每到一个时刻,都会自动的产生某些特定的操作形式                    con ...

  7. 菜鸡的Java笔记 - java 反射机制

    反射机制        1.观察 Class 类的使用        2.利用反射改善工程设计模式        3.反射操作类结构            content (内容)        1. ...

  8. 菜鸡的Java笔记 java基础类库 BaseClassLibrary

    java基础类库 BaseClassLibrary        StringBuffer 类的特点        StringBuffer,StringBuilder,String 类之间的关系   ...

  9. 菜鸡的Java笔记 java数据库编程(JDBC)

    java数据库编程(JDBC)        介绍 JDBC 的基本功能            content (内容)        现在几乎所有的项目开发过程之中都不可能离开数据库,所以在java ...

随机推荐

  1. Java通过socket和DTU,RTU连接工业传感器通信

    现在做DTU传感器监测数据一块,给大家分享如何通过socket技术连接到DTU,并能和DTU下面的传感器通信的,分享一下自己的心得和体会. 总体架构图 先来看下整体网络结构图. 工业名称解释 传感器: ...

  2. 一个神秘的oj2093 花园的守护之神(最小割)

    给定一张无向图,你每次可以将一条路的权值增加1,询问最少增加多少次才会使得\(s->t\)的最短路改变 QwQ一看到这个题,我就用种最小割的感觉 我们可以把最短路上的点取出来,然后做最小割呀!! ...

  3. 微信小程序_快速入门01

    这段时间,嗯,大四课程已经结束了,工作也已经找到了,但是呢,到公司报道的时间还没到,哈哈,马上就开始人生的第一份工作了,怎么说确实有点期待~ 在这段时间一方面为第一份工作做各种准备,另一方面也没有停止 ...

  4. 云原生的弹性 AI 训练系列之三:借助弹性伸缩的 Jupyter Notebook,大幅提高 GPU 利用率

    Jupyter Notebooks 在 Kubernetes 上部署往往需要绑定一张 GPU,而大多数时候 GPU 并没有被使用,因此利用率低下.为了解决这一问题,我们开源了 elastic-jupy ...

  5. C#与java TCP通道加密通信

    背景说明 公司收费系统需要与银行做实时代收对接,业务协议使用我们收费系统的标准.但是银行要求在业务协议的基础上,使用银行的加密规则. 采用MD5计算报文摘要,保证数据的完整性 采用RSA256对摘要进 ...

  6. 灵光一闪!帮你使用Vue,搞定无法解决的“动态挂载”

    在一些特殊场景下,使用组件的时机无法确定,或者无法在Vue的template中确定要我们要使用的组件,这时就需要动态的挂载组件,或者使用运行时编译动态创建组件并挂载. 今天我们将带大家从实际项目出发, ...

  7. RogrePirates Scrum Meeting 博客汇总

    RogrePirates 博客目录 一.Scrum Meeting 1.Alpha阶段 第一次会议 第二次会议 第三次会议 第四次会议 第五次会议 第六次会议 第七次会议 第八次会议 第九次会议 第十 ...

  8. 技术博客——微信小程序的架构与原理

    技术博客--微信小程序的架构与原理 在两个月的微信小程序开发过程中,我曾走了不少弯路,也曾被很多现在看来十分可笑的问题所困扰.这些弯路与困扰,基本上都是由于当时对小程序的架构理解不够充分,对小程序的原 ...

  9. STM32直流电机启动(一)驱动电路的介绍

    驱动电路 典型的H桥驱动电路如下:要使电机旋转只需导通对角线上的两个三极管即可,如导通Q1,Q4,关闭Q2,Q4即可驱动电机正转:若想电机反向转动,即导通三极管Q2,Q3,关闭Q1,Q4.此时电路图可 ...

  10. 攻防世界 web3.backup

    如果网站存在备份文件,常见的备份文件后缀名有:.git ..svn..swp..~..bak..bash_history..bkf尝试在URL后面,依次输入常见的文件备份扩展名. ip/index.p ...