// 部门与雇员——数据表与简单Java类映射转换
package com.demo;
//部门
class Dept {
private long deptno ; //部门编号
private String dname ; //部门名称
private String loc ; //部门位置
//关联字段
private Emp emps [] ; //一个部门有多个雇员信息
public Dept(long deptno,String dname,String loc) {
this.deptno = deptno;
this.dname = dname;
this.loc = loc;
}
public long getDeptno() {
return deptno;
}
public void setDeptno(long deptno) {
this.deptno = deptno;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getLoc() {
return loc;
}
public void setLoc(String loc) {
this.loc = loc;
}
public Emp[] getEmps() {
return emps;
}
public void setEmps(Emp[] emps) {
this.emps = emps;
}
public String getInfo() {
return "【部门信息】 部门编号 = " + this.deptno + "、部门名称 = " + this.dname + "、部门位置 = " + this.loc;
}
}
//雇员
class Emp {
private long empno ; //编号
private String ename ; //姓名
private String job ; //职位
private double sal ; //工资
private double comm ; //佣金
//关联字段
private Dept dept ; //雇员所属部门
private Emp mgr ; //雇员所属领导
public Emp(long empno, String ename, String job, double sal, double comm) {
this.empno = empno ;
this.ename = ename ;
this.job = job;
this.sal = sal ;
this.comm = comm;
}
public long getEmpno() {
return empno;
}
public void setEmpno(long empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public double getSal() {
return sal;
}
public void setSal(double sal) {
this.sal = sal;
}
public double getComm() {
return comm;
}
public void setComm(double comm) {
this.comm = comm;
}
public String getInfo() {
return "【雇员信息】 雇员编号 = " + this.empno + "、雇员姓名 = " + this.ename + "、雇员职位 = " + this.job+ "、雇员工资 = " + this.sal + "、雇员佣金 = " + this.comm;
}
public Dept getDept() {
return dept;
}
public void setDept(Dept dept) {
this.dept = dept;
}
public Emp getMgr() {
return mgr;
}
public void setMgr(Emp mgr) {
this.mgr = mgr;
}
}
public class GuYong {
public static void main(String[] args) {
// 第一步:根据关系进行类的定义
// 定义出各个的实例化对象,此时并没有任何的关联定义
Dept dept = new Dept(10,"财务部","上海");
Emp empA = new Emp(7369L,"A","CLERK",800.00,0.0);
Emp empB = new Emp(7369L,"B","MANGER",2450.00,0.0);
Emp empC = new Emp(7369L,"C","BOSS",5000.00,0.0);
// 需要为对象进行关联的设置
empA.setDept(dept); //设置雇员与部门的关联
empB.setDept(dept);
empC.setDept(dept);
empA.setMgr(empB); //设置雇员与领导的关系
empB.setMgr(empC);
dept.setEmps(new Emp[] { empA, empB, empC}); //设置部门与雇员的关系
//第二步根据关系获取数据
System.out.println(dept.getInfo());
for(int x = 0 ; x < dept.getEmps().length ; x ++) {
System.out.println("\t|-" + dept.getEmps()[x].getInfo());
if(dept.getEmps()[x].getMgr() != null) {
System.out.println("\t\t|-" + dept.getEmps()[x].getMgr().getInfo()); //雇员的领导信息
}
}
System.out.println(empB.getDept().getInfo()); //根据雇员获取部门信息
System.out.println(empB.getMgr().getInfo()); //根据雇员获取领导信息
}
}
注意:“为雇员设置部门”与“为部门设置雇员”是两步
empA.setDept(dept); //设置雇员与部门的关联
empB.setDept(dept);
empC.setDept(dept);
dept.setEmps(new Emp[] { empA, empB, empC}); //设置部门与雇员的关系
如果只设置一步,则会出现空指针异常!