双向一对多映射
    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. NOIP 模拟四 考试总结

    #T1随 又是liu_................... 数列n,m个操作,每次随机取a[i],x=x*a[i]%k; 问题是求x期望%mod; 首先考虑到期望转移过程中存在%k,一般套路线性期望 ...

  2. Asp.Net Core 中的HTTP协议详解

    1.前言 好久没写博客了,最近虽然没什么假期,但是却比以前还忙!工作.工作.工作,就像赶集似的,聚在一起.对于Web开发人员来说,深入了解HTTP有助于我们开发出更好.更高的Web应用程序.当应用程序 ...

  3. 新一代容器平台ACK Anywhere,来了

    5G.AR.AIoT 等场景在推动新一代云架构的演进,而容器重塑了云的使用方式. 近日,阿里云容器服务全面升级为ACK Anywhere,让企业在任何需要云的地方,都能获得一致的容器基础设施能力. 早 ...

  4. java 从零开始手写 RPC (03) 如何实现客户端调用服务端?

    说明 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 写完了客户端和服务端,那么如何实现客户端和服务端的 ...

  5. Windows10系统下Java JDK下载、安装与环境变量配置(全网最全步骤)

    1.首先要明确: JDK.JRE.JVM的含义 2.下载目前最新的JDK:Java SE Development Kit 17,传送门::https://www.oracle.com/java/tec ...

  6. Ysoserial Commons Collections3分析

    Ysoserial Commons Collections3分析 写在前面 CommonsCollections Gadget Chains CommonsCollection Version JDK ...

  7. django3上线部署踩的坑

    好久没有用过django写项目了,最近公司开发个官网,一时兴起就拿来练练手,这不用不知道,一用吓一跳啊. 才多久,版本都到3.0了. 踩坑一:运行项目时失败报错,后来查找资料发现, 当你使用djang ...

  8. C++ 类继承 笔记(初步)

    本节内容源于对C++ primer第13章的学习,这本书把C++的原理将得明明白白.网上的博客往往讲得一头雾水.到头来还不如看原书本. 问题 首先给出一题: #include<stdio.h&g ...

  9. javascript-原生-结构

    1.获取用户输入内容的方法 window.prompt("提示信息","默认值"); 获取用户输入内容(字符串类型),返回用户输入内容. 2.顺序结构:所有语句 ...

  10. 痞子衡嵌入式:超级下载算法RT-UFL v1.0在Keil MDK下的使用

    痞子衡主导的"学术"项目 <RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计> v1.0 版发布近 4 个月了,部分客户已经在实际项目开发调试中用上了这个 ...