上一篇:一起来看引用与现实的邂逅 | 带你学《Java面向对象编程》之二十二
【本节目标】
通过阅读本节,你将学会如何将数据表通过一定的规则映射转换为Java中的类,并初步了解到现实中的各种数量映射关系在Java类之间的实现方法。
数据表与简单Java类映射转换
简单Java类是现在面向对象设计的主要分析基础,但是对于实际开发之中简单Java类的定义来源是有依据的,往往都是依据数据表的结构来实现简单Java类。
在数据库之中实际上是提供有若干个数据表的,那么每一张实体数据表实际上都可以描述出一些具体的事务概念,例如:雇员信息系表、部门信息表,这些一看就知道到描述的是雇员或者部门的信息。
那么按照这个思路回到程序之中会发现,程序类的定义实际上和这些实体表的差别并不大,所以在实际的开发之中,数据表与简单Java类之间的基本映射关系如下:
- 数据实体表设计 = 类的定义;
- 表中的字段 = 类的成员属性;
- 表的外键关联 = 引用关联;
- 表的一行记录 = 类的一个实例化对象;
- 表的多行记录 = 对象数组。
图一 部门与雇员实体表
在以上所对应数据表的关系之中可以发现有如下的关联存在:
- 一个部门有多个雇员;
- 一个雇员属于一个部门;
- 一个雇员有一个领导;
下面将以上数据表转为简单Java类的定义形式,在整体的程序代码之中要求可以获得如下信息:
-
根据部门信息获得以下内容:
- 一个部门的完整信息;
- 一个部门之中所有雇员的完整信息;
- 一个雇员对应的领导的信息;
-
根据雇员信息获得以下内容:
- 一个雇员对应的所在部门信息;
- 一个雇员对应的领导信息;
对于数据表与简单Java类之间的映射最好的解决步骤:先抛开所有的关联字段不看,写出类的基本组成,而后再通过引用配置关联字段的关系。
第一步:分别定义Emp、Dept两个实体类
第二步:配置所有的关联字段
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.empnno + “、雇员姓名 = ” + 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[]){
}
}
在以后进行实际项目开发的过程之中一定是分两个步骤实现的:
- 第一步:根据表的结构关系进行对象的配置;
- 第二步:根据要求通过结构获取数据。
范例:实现项目的开发要求
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.empnno + “、雇员姓名 = ” + 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()) ; //根据雇员获取领导信息
}
}
图二 执行结果图
在以后的开发之中这种转换的定义形式一定是要求熟练完成的。
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学