Java基礎(十三)
阿新 • • 發佈:2018-12-18
資料表與簡單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 JavaDemo {
public static void main(String args[]) {
// 第一步:根據關係進行類的定義
// 定義出各個的例項化物件,此時並沒有任何的關聯定義
Dept dept = new Dept(10,"財務部","上海") ;
Emp empA = new Emp(7369L,"SMITH","CLERK",800.00,0.0) ;
Emp empB = new Emp(7566L,"FORD","MANAGER",2450.00,0.0) ;
Emp empC = new Emp(7839L,"KING","PRESIDENT",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()) ; // 根據僱員獲取領導資訊
}
}
實際開發中這種轉換的定義形式一定要熟練完成。(類似與之前做的專案中EF的codeFirst,Dbfirst,MoudleFirst直接對映)