综合案例之数据表与简单映射
利用实际数据表实现表与类的操作转化。
要求完成如下两类操作:
- 第一类:可以根据数据表定义的结构关系进行数据以及引用的设置;
- 第二类:根据数据表的结构可以取出所需要的数据。
本次选用dept、emp实现转换操作。开发要求如下:
- 本次开发使用以下的数据表与表中的字段:
- 雇员表(emp):empno,ename,job,sal,comm,mgr,deptno;
- 部门表(dept):deptno,dname,loc。
- 数据的操作要求:
- 根据表结构完整的设置雇员、经理、部门关系;
- 可以完成如下的内容输出。
- 可以输出一个雇员的完整信息,包括雇员的领导、以及所在的部门信息;
- 可以输出一个部门的完整信息,包括部门的所有雇员信息,以及这个雇员的领导信息。
第一步:写出基本字段的映射转换
- 雇员表(emp):empno,ename,job,sal,comm;
- 部门表(dept):deptno,dname,loc。
class Emp{
private int empno;
private String ename;
private String job;
private double sal;
private double comm;
public Emp(){}
public Emp(int 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.comm;
}
}
class Dept{
private int deptno;
private String dname;
private String loc;
public Dept(){}
public Dept(int 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;
}
}
第二步:设计关系字段
本程序存在有两个关系:
- 自身关联:mgr字段,mgr也是一个雇员;
- 外键关联:deptno字段。
class Emp{
private int empno;
private String ename;
private String job;
private double sal;
private double comm;
private Emp mgr;//雇员领导
private Dept dept;
public Emp(){}
public Emp(int 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.comm;
}
public void setMgr(Emp mgr){
this.mgr=mgr;
}
public void setDept(Dept dept){
this.dept=dept;
}
public Emp getMgr(){
return this.mgr;
}
public Dept getDept(){
return this.dept;
}
}
class Dept{
private int deptno;
private String dname;
private String loc;
private Emp[] emps;
public Dept(){}
public Dept(int deptno,String dname,String loc){
this.deptno=deptno;
this.dname=dname;
this.loc=loc;
}
//setter、getter略
public void setEmps(Emp[] emps){
this.emps=emps;
}
public Emp[] getEmps(){
return this.emps;
}
public String getInfo(){
return "部门编号:"+this.deptno+",部门名称:"+this.dname+",位置:"+this.loc;
}
}
第三步:执行数据操作
- 设置数据的关系
class Emp{
private int empno;
private String ename;
private String job;
private double sal;
private double comm;
private Emp mgr;//雇员领导
private Dept dept;
public Emp(){}
public Emp(int 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.comm;
}
public void setMgr(Emp mgr){
this.mgr=mgr;
}
public void setDept(Dept dept){
this.dept=dept;
}
public Emp getMgr(){
return this.mgr;
}
public Dept getDept(){
return this.dept;
}
}
class Dept{
private int deptno;
private String dname;
private String loc;
private Emp[] emps;
public Dept(){}
public Dept(int deptno,String dname,String loc){
this.deptno=deptno;
this.dname=dname;
this.loc=loc;
}
//setter、getter略
public void setEmps(Emp[] emps){
this.emps=emps;
}
public Emp[] getEmps(){
return this.emps;
}
public String getInfo(){
return "部门编号:"+this.deptno+",部门名称:"+this.dname+",位置:"+this.loc;
}
}
public class Hello {
public static void main(String args[]){
//第一步:根据已有的表结构设置数据
//准备好所有独立的类对象
Dept dept = new Dept(10,"ACCOUNTING","New York");
Emp empa=new Emp(7369,"SMITH","CLEAK",800.0,0.0);
Emp empb=new Emp(7902,"FROD","MANAGER",2450.0,0.0);
Emp empc=new Emp(7839,"SMITH","CLEAK",5000.0,0.0);
//2、设置彼此的关系
//设置雇员和领导的关系
empa.setMgr(empb);
empb.setMgr(empc);
//设置部门关系
empa.setDept(dept);
empb.setDept(dept);
empc.setDept(dept);
dept.setEmps(new Emp[]{empa,empb,empc});//一个部门包含多个雇员
}
}
- 取出雇员的完整数据
public class Hello {
public static void main(String args[]){
//第一步:根据已有的表结构设置数据
//准备好所有独立的类对象
Dept dept = new Dept(10,"ACCOUNTING","New York");
Emp empa=new Emp(7369,"SMITH","CLEAK",800.0,0.0);
Emp empb=new Emp(7902,"FROD","MANAGER",2450.0,0.0);
Emp empc=new Emp(7839,"SMITH","CLEAK",5000.0,0.0);
//2、设置彼此的关系
//设置雇员和领导的关系
empa.setMgr(empb);
empb.setMgr(empc);
//设置部门关系
empa.setDept(dept);
empb.setDept(dept);
empc.setDept(dept);
dept.setEmps(new Emp[]{empa,empb,empc});//一个部门包含多个雇员
//第二步:根据数据表结构利用引用关系取得数据
System.out.println(empa.getInfo());//输出雇员的基本信息
System.out.println("\t|-【领导信息】"+empa.getMgr().getInfo());
System.out.println("\t|-【部门信息】"+empa.getDept().getInfo());
}
}
- 取出一个部门的完整信息。
public class Hello {
public static void main(String args[]){
//第一步:根据已有的表结构设置数据
//准备好所有独立的类对象
Dept dept = new Dept(10,"ACCOUNTING","New York");
Emp empa=new Emp(7369,"SMITH","CLEAK",800.0,0.0);
Emp empb=new Emp(7902,"FROD","MANAGER",2450.0,0.0);
Emp empc=new Emp(7839,"SMITH","CLEAK",5000.0,0.0);
//2、设置彼此的关系
//设置雇员和领导的关系
empa.setMgr(empb);
empb.setMgr(empc);
//设置部门关系
empa.setDept(dept);
empb.setDept(dept);
empc.setDept(dept);
dept.setEmps(new Emp[]{empa,empb,empc});//一个部门包含多个雇员
//第二步:根据数据表结构利用引用关系取得数据
System.out.println(empa.getInfo());//输出雇员的基本信息
System.out.println("\t|-【领导信息】"+empa.getMgr().getInfo());
System.out.println("\t|-【部门信息】"+empa.getDept().getInfo());
System.out.println("========================================================");
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());
}
}
}
}