来自现实世界的邀请:映射转换 | 带你学《Java面向对象编程》之二十三-阿里云开发者社区

开发者社区> 温柔的养猫人> 正文

来自现实世界的邀请:映射转换 | 带你学《Java面向对象编程》之二十三

简介: 本节通过生活中常见的部门-雇员关系手把手带领读者将现实存在的数据表转化成Java实体类。
+关注继续查看

上一篇:一起来看引用与现实的邂逅 | 带你学《Java面向对象编程》之二十二
【本节目标】
通过阅读本节,你将学会如何将数据表通过一定的规则映射转换为Java中的类,并初步了解到现实中的各种数量映射关系在Java类之间的实现方法。

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

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

  • 数据实体表设计 = 类的定义;
  • 表中的字段 = 类的成员属性;
  • 表的外键关联 = 引用关联;
  • 表的一行记录 = 类的一个实例化对象;
  • 表的多行记录 = 对象数组。

image.png
图一 部门与雇员实体表

在以上所对应数据表的关系之中可以发现有如下的关联存在:

  • 一个部门有多个雇员;
  • 一个雇员属于一个部门;
  • 一个雇员有一个领导;

下面将以上数据表转为简单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()) ; //根据雇员获取领导信息
  }  
}

image.png
图二 执行结果图

在以后的开发之中这种转换的定义形式一定是要求熟练完成的。
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:千字为你打开映射的大门 | 带你学《Java面向对象编程》之二十四
更多Java面向对象编程文章查看此处

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
一文带你迅速搞懂包是什么 | 带你学《Java面向对象编程》之六十七
高效的编程往往免不了多人合作,本节提到的包的概念可以有效避免重名类出错的问题。
364 0
将WordPress站点转换为Joomla
本教程将向您展示如何将现有的WordPress站点移动到Joomla。这适用于最多5个的许多WordPress版本,适用于Joomla3。 在开始之前,您需要了解以下内容: 这将从WordPress导入类别,但它不会将导入的帖子/页面与相应的类别相关联。
945 0
导入其他包,轻松实现跨包调用 | 带你学《Java面向对象编程》之六十八
本节为读者介绍了不同的包之间如何调用其内的类-使用import导入其他包内容。
699 0
带你读《存储漫谈Ceph原理与实践》第三章接入层3.2对象存储RGW(二)
《存储漫谈Ceph原理与实践》第三章接入层3.2对象存储RGW
21 0
三分钟带你认识注解 | 带你学《Java面向对象编程》之四十五
本节将为读者介绍JDK1.5之后诞生的新特性-注解式编程方式,并为读者深度剖析其出现的价值与意义。
564 0
《存储漫谈Ceph原理与实践》第三章接入层3.2对象存储RGW(一)
《存储漫谈Ceph原理与实践》第三章接入层3.2对象存储RGW
29 0
06.Java网络编程(java GUI实现的聊天界面)
目前测试存在两个问题 1.最初是继承Frame来实现界面显示,后来发现,界面中部分控件存在时而显示时而不显示的问题,查找资料之后,将Frame修为JFrame,并且修改setVisible的时机,界面显示的问题解决,不显示的原因,有一种说法就是注释中提到的 2.
1139 0
手把手教你绘制类图 | 带你学《Java面向对象编程》之七十一
类图是让人能够直观了解类的一种表现形式,本节将手把手带你使用PowerDesigner绘制类图。
592 0
了解超然物外的static-属性篇 | 带你学《Java面向对象编程》之十
本节通过传统类与使用static的类之间的比较,突出了static对于存储超大量重复性数据的优异表现。
920 0
1172
文章
2
问答
来源圈子
更多
Java开发者成长课堂,课程资料学习,实战案例解析,Java工程师必备词汇等你来~
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载