数据表与简单Java类的映射转换(一对多)精英版

数据表与简单Java类的映射转换

简单Java类时现在面向对象设计的主要分析基础,但是对于实际的开发之中简单Java类的定义来源是有依据的的,往往都是根据与数据表的结构来实现简单Java类。
在数据库之中实际上是提供有若干个数据表的,那么每一张实体数据表实际上都可以描述出一些具体的事物。例如:雇员信息表,部门信息表一看就知道是描述的是雇员或部门的信息。
那么按照这个思路会发现,程序类的定义形式实际上和这些实体表的差别并不大,所以在实际的项目开发中,数据表与简单Java类的映射关系如下:

  • 数据实体表设计 = 类的定义

  • 表中的字段 = 类的成员属性;

  • 表的外键关联 = 引用关联;

  • 表的一行记录 = 类的一个实例化对象;

  • 表的多行记录 = 对象数组;
    对于部门和雇员,有以下关系:

  • 一个部门有多个雇员

  • 一个雇员属于一个部门

  • 一个雇员有一个领导
    下面将以上的数据表转换为简单Java类的定义形式,在整体的程序编码之中要求可以获得如下信息:

  • 根据部门信息获得以下内容

     	1.一个部门的完整信息
     	2.一个部门之中所有雇员的完整信息
     	3.一个雇员对应的领导的信息
    
  • 根据雇员信息获得以下信息

        1.一个雇员所在部门信息
     	2.一个雇员对应的领导信息
    

对于数据表与简单Java类之间映射最好的解决步骤:先抛开所有等的关联字段不看,写成类的基本组成,而后通过引用配置关联字段的关系。
第一步: 定义Emp、Demp两个实体类

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;
	}//setter、getter、无参构造略
	public void setEmps(Emp[] emps) {
    
    
		this.emps = emps;
	}
	public Emp[] getEmps() {
    
    
		return this.emps;
	}
	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;
	}
}

在以后进行实际项目的开发之中一定是分两个步骤实现的:

  • 第一步: 根据表的结构关系进行对象配置
  • 第二步: 根据要求通过结构获取数据

范式:实现项目开发要求

package www.anan;

public class Demo1 {
    
    

	public static void main(String[] args) {
    
    
		//第一步:根据关系进行类的定义
		//定义出各个实例化对象,此时并没有任何的关联定义
		Dept dept=new Dept(10L, "财务部", "上海");
		Emp empA=new Emp(7369L, "SMITH", "CLERK", 800.00, 0.0);
		Emp empB=new Emp(7543L, "ALLEN", "MANAGER", 2456.00, 0.0);
		Emp empC=new Emp(7893L, "KING", "PERSIDENT", 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());
	}
}
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;
	}//setter、getter、无参构造略
	public void setEmps(Emp[] emps) {
    
    
		this.emps = emps;
	}
	public Emp[] getEmps() {
    
    
		return this.emps;
	}
	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;
	}
}

以后的开发之中这种转换的定义一定要求熟练完成。

猜你喜欢

转载自blog.csdn.net/weixin_46688667/article/details/107963196