数据表和简单Java类的相关概念对比:
- 数据实体表设计 = 类的定义
- 表中的字段 = 类的成员属性
- 表的外键关联 = 对象引用关联
- 表的一行记录 = 类的一个实例化对象
- 表的多行记录 = 对象数组
两张表【部门表(dept),员工表(emp)】,描述部门和员工的逻辑关系:
- 一个部门多个员工
- 一个员工属于一个部门
- 每个员工都有一个领导信息
实现一对多数据结构转换的例子:
package com.mydemo;
public class DeptDemo {
public static void main(String args[]){
// 第一步:更具关系进行类的定义
// 定义出各个雇员的实例化对象,此时并没有任何的关联定义
Dept dept = new Dept(0001, "研发部", "1号楼");
Emp empA = new Emp(01, "张三", "java工程师", 20000.00, 12000.00);
Emp empB = new Emp(02, "李四", "前端工程师", 15000.00, 10000.00);
Emp empC = new Emp(03, "王五", "项目经理", 30000.00, 20000.00);
// 根据数据表定义的数据关系,利用引用进行对象间的联系
empA.setDept(dept); // 设置员工与部门的关联
empB.setDept(dept); // 设置员工与部门的关联
empC.setDept(dept); // 设置员工与部门的关联
empA.setMgr(empC); // 设置员工与领导的关联
empB.setMgr(empC); // 设置员工与领导的关联
dept.setEmp(new Emp[]{empA, empB, empC}); // 设置部门与员工的关联
// 第二步:根据关联获取数据
System.out.println(dept.getInfo());
System.out.println("------------");
for(int i = 0; i < dept.getEmp().length; i++){
// 部门里所有员工信息
System.out.println("\t|- " + dept.getEmp()[i].getInfo());
if(dept.getEmp()[i].getMgr() != null){
// 有领导的员工信息
System.out.println("\t\t|- " + dept.getEmp()[i].getInfo());
}
}
System.out.println(empA.getDept().getInfo()); // 根据员工获取部门信息
System.out.println(empA.getMgr().getInfo()); // 根据员工获取领导信息
}
}
// 定义一个“部门”类
class Dept{
private long deptNo; // 部门编号
private String deptName; // 部门名称
private String deptLocation; // 部门位置
private Emp emp[]; // 保存多个员工---一个部门对应多个员工信息,通过对象数组描述
/**
* 构造方法
* @param deptNo
* @param deptName
* @param deptLocation
*/
public Dept(long deptNo, String deptName, String deptLocation){
this.deptNo = deptNo;
this.deptName = deptName;
this.deptLocation = deptLocation;
}
/**
*
* @return
*/
public String getInfo(){
return "【部门信息】部门编号:" + this.deptNo + "、部门名称:" + this.deptName + "、部门位置:" + this.deptLocation;
}
public long getDeptNo() {
return deptNo;
}
public void setDeptNo(long deptNo) {
this.deptNo = deptNo;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
public String getDeptLocation() {
return deptLocation;
}
public void setDeptLocation(String deptLocation) {
this.deptLocation = deptLocation;
}
public Emp[] getEmp() {
return emp;
}
public void setEmp(Emp[] emp) {
this.emp = emp;
}
}
// 定义一个“员工”类
class Emp {
private long empNo; // 员工编号
private String empName; // 员工姓名
private String empJob; // 员工职位
private double empSal; // 员工薪资
private double empCom; // 员工佣金
private Dept dept; // 所属部门---一个员工属于一个部门
private Emp mgr; // 所属领导---一个员工有一个领导,由于领导也是员工,所以自身关联
/**
* 构造方法
* @param empNo
* @param empName
* @param empJob
* @param empSal
* @param empCom
*/
public Emp(long empNo, String empName, String empJob, double empSal, double empCom){
this.empNo = empNo; // 为empNo初始化
this.empName = empName; // 为empName初始化
this.empJob = empJob; // 为empJob初始化
this.empSal = empSal; // 为empSal初始化
this.empCom = empCom; // 为empCom初始化
}
/**
* 获取信息
* @return
*/
public String getInfo(){
return "【员工信息】员工编号:" + this.empNo + "、员工姓名:" + this.empName
+ "、员工职位:" + this.empJob + "、员工薪资:" + this.empSal
+ "、员工佣金:" + this.empCom;
}
public long getEmpNo() {
return empNo;
}
public void setEmpNo(long empNo) {
this.empNo = empNo;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public String getEmpJob() {
return empJob;
}
public void setEmpJob(String empJob) {
this.empJob = empJob;
}
public double getEmpSal() {
return empSal;
}
public void setEmpSal(double empSal) {
this.empSal = empSal;
}
public double getEmpCom() {
return empCom;
}
public void setEmpCom(double empCom) {
this.empCom = empCom;
}
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;
}
}
运行结果:
【部门信息】部门编号:1、部门名称:研发部、部门位置:1号楼
------------
|- 【员工信息】员工编号:1、员工姓名:张三、员工职位:java工程师、员工薪资:20000.0、员工佣金:12000.0
|- 【员工信息】员工编号:1、员工姓名:张三、员工职位:java工程师、员工薪资:20000.0、员工佣金:12000.0
|- 【员工信息】员工编号:2、员工姓名:李四、员工职位:前端工程师、员工薪资:15000.0、员工佣金:10000.0
|- 【员工信息】员工编号:2、员工姓名:李四、员工职位:前端工程师、员工薪资:15000.0、员工佣金:10000.0
|- 【员工信息】员工编号:3、员工姓名:王五、员工职位:项目经理、员工薪资:30000.0、员工佣金:20000.0
【部门信息】部门编号:1、部门名称:研发部、部门位置:1号楼
【员工信息】员工编号:3、员工姓名:王五、员工职位:项目经理、员工薪资:30000.0、员工佣金:20000.0