我们在程序开发过程中往往会使用简单Java类进行数据表结构的描述,本文主要介绍如何简单Java类与数据表之间的转换。
首先,先简单介绍一下数据表与简单Java类的相关概念对比:
- 表的定义 → 实体表设计
- 表的字段 → 类的成员属性
- 表的外键关联 → 对象引用关联
- 表的记录 → 类的实例化对象
- 表的多行记录 → 对象数组
在数据库表设计时,我们想要描述就部门与员工归属部门的关联关系,通常会设计两张表,部门表和员工信息表,如下Department表、Employees表:
通过上述两张表可以提取出如下逻辑关系:
- 每个员工归属一个领导
- 每个员工归属于一个部门
- 每个部门包含的员工
那么如何描述表数据与关系呢?为了描述上述两张表,我们需要根据表结构定义实体类结构,通过成员属性的引用关系描述表连接(逻辑关系)。
我们通过定义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 ; } }
我们通过定义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 -> 姓名:琳琳 -> 级别:总经理