数据表与简单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;
}
}
以后的开发之中这种转换的定义一定要求熟练完成。