1. 程式人生 > >Java基礎(十三)

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 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直接對映)