我们在程序开发过程中往往会使用简单Java类进行数据表结构的描述,本文主要介绍如何简单Java类与数据表之间的转换。

首先,先简单介绍一下数据表与简单Java类的相关概念对比:

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

在数据库表设计时,我们想要描述就部门与员工归属部门的关联关系,通常会设计两张表,部门表和员工信息表,如下Department表、Employees表:




java list映射 yml java数据映射_架构师


通过上述两张表可以提取出如下逻辑关系:

  • 每个员工归属一个领导
  • 每个员工归属于一个部门
  • 每个部门包含的员工

那么如何描述表数据与关系呢?为了描述上述两张表,我们需要根据表结构定义实体类结构,通过成员属性的引用关系描述表连接(逻辑关系)。


java list映射 yml java数据映射_java映射_02


我们通过定义Department类来描述Department表,其中我们使用emp属性描述一个部门包含多个员工的逻辑关系,因为一个部门包含多个员工, 因此使用对象数组来描述,代码如下:

class  Department  {     /*部门ID*/     private String deptNumber ;      /* 部门名称*/     private String deptName;      /*一个部门包含的员工*/     private Employees emp []  ;       public  Department(String number, String name) {                 this.deptNumber = number ;         this.deptName = name ;     }      public void setEmp(Employees  []  emp) {         this.emp = emp ;     }          public Employees [] getEmp() {         return this.emp ;        }      public String deptInfo() {         return "部门ID:" + this.deptNumber +" -> " + "部门名称:" + this.deptName ;     } }


java list映射 yml java数据映射_获取数据_03


我们通过定义Employees类来描述Employees表,其中我们使用deptNumber属性描述每个员工归属一个部门的逻辑关系,使用leader属性描述每个员工归属一个领导的逻辑关系,代码如下:

class Employees{     private String empNumber;     private String empName ;     /*每个员工归属一个部门*/     private  Department deptNumber ;     private String empLevel ;     /*每个员工归属一个领导*/     private Employees leader ;          public Employees(String empNumber,String empName,String empLevel) {         this.empNumber = empNumber ;         this.empName = empName ;         this.empLevel = empLevel ;     }          public void setDeptNumber(Department deptNumber) {         this.deptNumber =  deptNumber;     }          public void setLeader(Employees leader) {         this.leader = leader ;     }     public Employees getLeader() {         return this.leader  ;     }     public Department getDept() {         return this.deptNumber  ;     }          public String empInfo() {         return "员工编号:"+ this.empNumber+" -> "  + "姓名:" + this.empName+" -> " + "级别:" + this.empLevel ;     } }

如下,我们通过实例化Department、Employees对象,设置属性数据,并根据引用关系可以获取数据内容。

public class ArrayDemo {         public static void main(String arg []) {             Department dept1 = new Department("1", "测试部") ;             Department dept2 = new Department("2", "总经办") ;             Employees emp1 = new Employees("9527", "群群", "架构师") ;             Employees emp2 = new Employees("9528", "叽叽", "架构师") ;             Employees emp3 = new Employees("9529", "琳琳", "总经理") ;                          emp1.setDeptNumber(dept1);             emp2.setDeptNumber(dept1);             emp3.setDeptNumber(dept2);             emp1.setLeader(emp3);             emp2.setLeader(emp3);                          dept1.setEmp(new Employees [] {emp1,emp2});             dept2.setEmp(new Employees [] {emp3});              /*              * 查看测试部下所有员工              */             System.out.println(dept1.deptInfo());             for (Employees employees : dept1.getEmp()) {                 System.out.println("所含员工信息: "+ employees.empInfo() + "        员工上级领导信息:   "+ employees.getLeader().empInfo());                              }         }                   }

获取数据如下:

部门ID:1 -> 部门名称:测试部 所含员工信息: 员工编号:9527 -> 姓名:群群 -> 级别:架构师         员工上级领导信息:   员工编号:9529 -> 姓名:琳琳 -> 级别:总经理 所含员工信息: 员工编号:9528 -> 姓名:叽叽 -> 级别:架构师         员工上级领导信息:   员工编号:9529 -> 姓名:琳琳 -> 级别:总经理