简单java类是面向对象设计的主要分析基础,但对于实际开发之中简单的java类的来源是有依据的,往往根据数据表的结构来实现简单java类。
在数据库之中实际上是提供有若干个数据表的,那么每一张实体数据表实际上都可以描述出一些具体的事物。
如:雇员信息表描述雇员信息。
按这个思路会发现,程序类的定义形式和实体表的差距并不大。在实际的开发之中,数据白与简单java类的基本映射关系如下。
- 数据表实体的设计=类的定义
- 表中的字段=类的成员属性
- 表的一行记录 = 类的一个实例化对象
- 表的多行记录=对象数组
- 表的外键关联 = 表的引用关联
关系:
- 一个部门有多个雇员
- 一个雇员属于一个部门
- 一个雇员有一个领导
将以上数据表转换为简单java类的定义形式。
要求:
根据部门内容获得以下信息:
- 一个部门的完整信息
- 一个部门所有雇员的完整信息
- 一个雇员对应的领导的信息
根据雇员信息获得以下信息:
- 一个雇员所在部门信息
- 一个雇员对应的领导信息
解决步骤:
先抛开所有的关联字段不看,写出类的基本组成,而后通过引用配置关联字段。
- 分别定义Emp、Dept两个实体类
class 数据表与简单java类映射转换
{
public static void main(String[] args)
{
}
}
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 数据表与简单java类映射转换
{
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 setEmp(Emp[] emps){
this.emps = emps;
}
//返回雇员信息
public Emp[] getEmp(){
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;
}
//配置部门、领导信息
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;
}
//setter、getter、无参构造略
public String getInfo(){
return "【员工信息】员工编号 = " + this.empno
+ "、姓名 = " +this.ename
+ "、职位 = " + this.job
+ "、基本工资 = " + this.sal
+ "、佣金 = " +this.comm;
}
}
在以后进行实际项目开发的过程中一定是分两个步骤实现的
- 第一步:根据表的结构关系进行对象的配置
- 第二步:根据要求通过结构获取数据
要求实现:
class 数据表与简单java类映射转换
{
public static void main(String[] args)
{
//第一步:根据关系进行类的定义。
//分别创建对象,此时并没有关联信息
Dept dept = new Dept(1l,"财务部","4栋3楼301");
Emp empA = new Emp(1l,"王五","财务拨款",3000,1000);
Emp empB = new Emp(2l,"李四","库存管理",2000,1000);
Emp empC = new Emp(3l,"五三","信息汇总",1000,1000);
//信息关联
dept.setEmp(new Emp[]{empA,empB,empC});//给部门配置员工信息
//给三名员工配置部门信息
empA.setDept(dept);
empB.setDept(dept);
empC.setDept(dept);
//给BC两名员工配置领导为A的信息
empB.setMgr(empA);
empC.setMgr(empA);
//第二步:根据关系获取数据
System.out.println(dept.getInfo()); //一个部门的完整信息
for(int x = 0;x < dept.getEmp().length;x++){
System.out.println(dept.getEmp()[x].getInfo());//一个部门所有员工信息
if(dept.getEmp()[x].getMgr() != null){
System.out.println("领导:\t"+dept.getEmp()[x].getMgr().getInfo());//一个雇员对应的领导的信息
}
}
System.out.println(empB.getDept().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;
}
//配置部门的雇员信息
public void setEmp(Emp[] emps){
this.emps = emps;
}
//返回雇员信息
public Emp[] getEmp(){
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;
}
//配置部门、领导信息
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;
}
//setter、getter、无参构造略
public String getInfo(){
return "【员工信息】员工编号 = " + this.empno
+ "、姓名 = " +this.ename
+ "、职位 = " + this.job
+ "、基本工资 = " + this.sal
+ "、佣金 = " +this.comm;
}
}
3、实现项目的开发要求