重温java知识(十四、数据表与简单Java类映射转换)

数据表和简单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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值