阿里云名师课堂Java面向对象开发41:第03个代码模型综合案例:数据表与简单Java类(一对多)
Posted playerone
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阿里云名师课堂Java面向对象开发41:第03个代码模型综合案例:数据表与简单Java类(一对多)相关的知识,希望对你有一定的参考价值。
一对多
- 回顾:复习《阿里云【名师课堂】Java面向对象开发9:【第01个代码模型】综合案例:简单Java类》https://blog.csdn.net/weixin_43624945/article/details/106601659
要求程序描述出如下的对应关系:
- 一个部门有多个雇员,并且可以输出一个部门的完整信息(包括雇员信息);
- 可以根据一个雇员找到雇员对应的领导信息和雇员所在的部门信息。
既然是数据表与简单Java类,有如下要求(实际开发中的简单Java类的设计原则):
- 简单Java类的名称 = 实体表名称;
- 简单Java类的属性 = 实体表的字段;
- 简单Java类的一个对象 = 表的一行记录;
- 对象数组 = 表的多行记录;
- 外键关系 = 引用配置。
1、先将所有的基础字段转化为类。
class Emp{
private int eid ;
private String ename ;
private String job ;
private double sal ;
private double comm ;
public Emp(int eid,String ename,String job,double sal,double comm) {
this.eid = eid ;
this.ename = ename ;
this.job = job ;
this.sal = sal ;
this.comm = comm ;
}
public String getInfo() { // 返回类完整信息的方法,觉得混淆可以写getEmpInfo()
return "【EMP】id = " + this.eid + ",name = " + this.ename +
",job = " + this.job + ",salary = " + this.sal + ",commission = " + this.comm ;
}
}
class Dept{
private int did ;
private String dname ;
private String loc ;
public Dept(int did,String dname,String loc) {
this.did = did ;
this.dname = dname ;
this.loc = loc ;
}
public String getInfo() { // 返回类完整信息的方法,觉得混淆可以写getDeptInfo()
return "【DEPT】id = " + this.did + ",name = " + this.dname +
",location = " + this.loc ;
}
}
2、然后进行关系设计,列出数据表中对应的关系
- 一个雇员属于一个部门,需要追加部门引用;
- 一个雇员有一个领导,领导一定是自身关联,自身引用。
- 一个部门有多个雇员,需要一个对象数组来描述多个雇员信息。
在Emp类中加入:
private Emp mgr ; // 描述雇员的领导
private Dept dept ; // 描述雇员所在部门
public void setMgr(Emp mgr){
this.mgr = mgr ;
}
public Emp getMgr(){
return this.mgr ;
}
public void setDept(Dept dept){
this.dept = dept ;
}
public Dept getDept(){
return this.dept ;
}
在Dept类中加入:
private Emp [] emps ;
public void setEmps(Emp [] emps){
this.emps = emps ;
}
public Emp[] getEmps(){
return this.emps ;
}
3、最后根据开发需求设计
- 一个部门有多个雇员,并且可以输出一个部门的完整信息(包括雇员信息);
- 可以根据一个雇员找到雇员对应的领导信息和雇员所在的部门信息。
class Emp{
private int eid ; // 员工工号
private String ename ; // 员工姓名
private String job ; // 职位
private double sal ; // 薪水
private double comm ; // 佣金
private Emp mgr ; // 描述雇员的领导
private Dept dept ; // 描述雇员所在部门
public Emp(int eid,String ename,String job,double sal,double comm) {
this.eid = eid ;
this.ename = ename ;
this.job = job ;
this.sal = sal ;
this.comm = comm ;
}
public void setMgr(Emp mgr){
this.mgr = mgr ;
}
public Emp getMgr(){
return this.mgr ;
}
public void setDept(Dept dept){
this.dept = dept ;
}
public Dept getDept(){
return this.dept ;
}
public String getInfo() { // 返回类完整信息的方法,觉得混淆可以写getEmpInfo()
return "【EMP】id = " + this.eid + ",name = " + this.ename +
",job = " + this.job + ",salary = " + this.sal + ",commission = " + this.comm ;
}
}
class Dept{
private int did ; // 部门编号
private String dname ; // 部门名称
private String loc ; // 所在位置
private Emp[] emps ;
public Dept(int did,String dname,String loc) {
this.did = did ;
this.dname = dname ;
this.loc = loc ;
}
public void setEmps(Emp[] emps){
this.emps = emps ;
}
public Emp[] getEmps(){ // 注意这里返回值是数组,输出时使用for循环
return this.emps ;
}
public String getInfo() { // 返回类完整信息的方法,觉得混淆可以写getDeptInfo()
return "【DEPT】id = " + this.did + ",name = " + this.dname +
",location = " + this.loc ;
}
}
public class TestDemo { // 设置开发需求
public static void main(String args[]) {
// 第一步:设置类对象间的关系
// 1、分别创建各类的实例化对象
Dept depta = new Dept(10,"ACCOUNTING","New York") ;
Emp ema = new Emp(4396,"Dexter","CLERK",800.0,0.0) ;
Emp emb = new Emp(4728,"Tsukishima Kei","MANAGER",2500.0,0.0) ;
Emp emc = new Emp(1230,"Toono Takaki","PRESIDENT",4500.0,0.0) ;
// 2、设置对象间的引用关系
// 2.1 设置雇员与领导的关系
ema.setMgr(emb) ; // emb是ema的领导
emb.setMgr(emc) ; // emc是emb的领导,emc没有领导
// 2.2 设置雇员与部门的关系
ema.setDept(depta) ;
emb.setDept(depta) ;
emc.setDept(depta) ;
// 2.3 设置部门与雇员的关系
depta.setEmps(new Emp[] {ema,emb,emc}) ; // Emp[] emps = new Emp[] {ema,emb,emc}
// 第二步:根据关系取出数据
// 3、一个部门有多个雇员,并且可以输出一个部门的完整信息(包括雇员信息)
System.out.println(depta.getInfo()) ; // 输出部门的信息
for(int x= 0 ; x < depta.getEmps().length ; x++){ // 输出部门所有部员的信息
System.out.println(" ##" + depta.getEmps()[x].getInfo()) ;
if(depta.getEmps()[x].getMgr() != null){ // 领导不为空(有领导)时输出部员的领导信息
System.out.println(" @@" + depta.getEmps()[x].getMgr().getInfo()) ;
}
}
System.out.println("===============================================================") ;
// 4、可以根据一个雇员找到雇员对应的领导信息和雇员所在的部门信息
System.out.println(ema.getInfo()) ; // 输出雇员(任意一个)的信息
if(ema.getMgr() != null){ // 领导不为空(有领导)时输出部员的领导信息
System.out.println(" ##" + ema.getMgr().getInfo()) ;
}
if(ema.getDept() != null){ // 部门不为空(有部门)时输出部员的部门信息
System.out.println(" @@" + ema.getDept().getInfo()) ;
}
}
}
以上是关于阿里云名师课堂Java面向对象开发41:第03个代码模型综合案例:数据表与简单Java类(一对多)的主要内容,如果未能解决你的问题,请参考以下文章