Java 第9 章 : 資料表與簡單Java類對映轉換

Bsciology發表於2020-12-01

課時38:綜合實戰:資料表與簡單Java類對映轉換

簡單Java類是現在物件導向設計的主要分析基礎,但是對於實際的開發之中簡單Java類的定義來源是有依據的,往往都是根據資料標的結構來實現簡單Java類。

        在資料庫之中實際上是提供有若干個資料表的,那麼每一張實體資料表都可以描述出一些具體的事物,例如:僱員資訊表、部門資訊表一看就知道描述的是僱員或部門的資訊。

        那麼按照這個思路回到程式之中你會發現,程式類的定義形式實際上和這些表的差別並不大,所以在實際的開發之中資料表與簡單Java類之間的基本對映關係如下:

  • 資料實體表設計 = 類的定義;
  • 表中的欄位 = 類的成員屬性;
  • 標的外來鍵關聯 = 引用關聯;
  • 標的一行記錄 = 類的例項化物件;
  • 標的多行記錄 = 物件陣列。

        在以上所對應資料表的關係之中可以發現有如下的關聯存在:

  • 一個部門有多個僱員;
  • 一個僱員屬於一個部門;
  • 一個僱員有一個領導;

    下面將以上的資料錶轉為簡單Java類的定義形式,在整體的程式程式碼之中要求可以獲得如下資訊:

  • 根據部門資訊獲得以下內容:

    |-一個部門的完整資訊;

    |-一個部門之中所有僱員的完整資訊;

    |-一個僱員對應的領導資訊;

  • 根據僱員資訊獲得以下內容:

    |-一個僱員所在的部門資訊;

    |-一個僱員對應的領導資訊。

對於資料表與簡單java類之間的對映最好的解決步驟:先拋開所有的關聯欄位不看,寫出類的基本組成,而後再通過引用配置關聯欄位的關係。

第一步:定義Emp、Dept兩個實體類

class Dept {
    private long deptno;
    private String dname;
    private String loc;

    public Dept(long deptno, String dname, String loc) {
        this.deptno = deptno;
        this.dname = dname;
        this.loc = loc;
    }

    //setter、getter,無參構造略
    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;

    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;
    }

    //setter、getter,無參構造略
    public String getInfo() {
        return "【僱員資訊】僱員編號 = " + this.empno + "、僱員姓名 = " + this.ename + "、僱員職位 = " + this.job + "、基本工資 = " + this.sal + "、佣金 = " + this.comm;
    }
}

第二部:配置所有的關聯欄位

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 void setEmps(Emp[] emps) {
        this.emps = emps;
    }

    public Emp[] getEmps() {
        return this.emps;
    }

    //setter、getter,無參構造略
    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;
    }

    //setter、getter,無參構造略
    public String getInfo() {
        return "【僱員資訊】僱員編號 = " + this.empno + "、僱員姓名 = " + this.ename + "、僱員職位 = " + this.job + "、基本工資 = " + this.sal + "、佣金 = " + this.comm;
    }

    public void setDept(Dept dept) {
        this.dept = dept;
    }

    public void setMgr(Emp mgr) {
        this.mgr = mgr;
    }

    public Dept getDept() {
        return this.dept;
    }

    public Emp getMgr() {
        return this.mgr;
    }
}

在以後進行實際專案開發過程中一定是分兩個步驟實現的:

  • 第一步:根據標的結構關係進行物件的配置;
  • 第二部:根據要求通過結構獲取資料。

範例:實現專案開發要求

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 void setEmps(Emp[] emps) {
        this.emps = emps;
    }

    public Emp[] getEmps() {
        return this.emps;
    }

    //setter、getter,無參構造略
    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;
    }

    //setter、getter,無參構造略
    public String getInfo() {
        return "【僱員資訊】僱員編號 = " + this.empno + "、僱員姓名 = " + this.ename + "、僱員職位 = " + this.job + "、基本工資 = " + this.sal + "、佣金 = " + this.comm;
    }

    public void setDept(Dept dept) {
        this.dept = dept;
    }

    public void setMgr(Emp mgr) {
        this.mgr = mgr;
    }

    public Dept getDept() {
        return this.dept;
    }

    public Emp getMgr() {
        return this.mgr;
    }
}

public class Demo {
    public static void main(String[] args) {
        //第一步根據關係進行類的定義
        //定義出各個的例項化物件,此事並沒有任何的關聯定義
        Dept dept = new Dept(10, "財務部", "上海");
        Emp empA = new Emp(7369L, "史密斯", "職員", 800.00, 0.0);
        Emp empB = new Emp(7566L, "福克斯", "領導", 2450.00, 0.0);
        Emp empC = new Emp(7839L, "緹娜", "老總", 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("------------------------------------------------------");
        System.out.println(empB.getDept().getInfo());  //根據僱員獲取部門資訊
        System.out.println(empB.getMgr().getInfo());  //根據僱員獲取領導資訊
    }
}

在以後的開發之中這種轉換的定義形式一定是要求熟練完成的。

課時39:綜合實戰:一對多對映

綜合案例:資料表與簡單Java類(一對多)

按照表的要求將表的結構轉換為類結構,同時可以獲取如下資訊:

  • 獲取一個分類的完整資訊;
  • 可以根據分類獲取其對應的所有子分類的資訊。

 

 

相關文章