数据表与简单java类映射(一对多)
在学习oracle的时候使用过了两张数据表:emp、dept表
emp表:empno(员工编号)、ename(员工名)、job、sal(薪金)、comm(佣金)、
mgr(上级编号)、deptno(部门编号),hiredate(受雇日期);
dept表:deptno(部门编号)、dname(部门名称)、loc(地点).
| - 一个部门有多少个雇员,并且可以输出一个部门的完整信息:(包括雇员信息);
| - 可以根据一个雇员找到雇员对应的领导信息和雇员所在部门的信息
【实际开发中的简单java类设计原则】通过简单java类的开发以及数据表的使用,可以观察出两者存在关系
| - 简单java的名称=实体表名称;
| - 简单java类的属性=实体表的字段
| - 简单java类的一个对象=表的一行记录
| - 外键关系=引用配置
1。先按照给定的关系将所有的基础字段转换为类
class Emp{
private String ename;
private String empno;
private String job;
private double sal;
private double comm;
public Emp() {}
public Emp(String ename,String empno,String job,double sal,double comm) {
this.empno=empno;
this.ename=ename;
this.job=job;
this.sal=sal;
this.comm=comm;
}
public String getInfo() {
return "【Emp】ename :"+ename+"empno:"+empno+"job:"+job+"sal:"+sal+"comm:"+comm;
}
}
class Dept{
private int deptno;
private String dname;
private String loc;
public Dept() {}
public Dept(String dname,String loc,int deptno) {
this.deptno=deptno;
this.dname=dname;
this.loc=loc;
}
public String getIno() {
return "【Dept】deptno :"+deptno+"dname:"+dname+"loc:"+loc;
}
}
public class 一对多 {
}
2.随后要进行关系设计,该数据表对应有如下的几个关系
一。 一个雇员属于一个部门,需要追加部门引用;
二。一个雇员有一个领导,领导一定是自身关联,自身引用
三。一个部门有多个雇员,
package 数据表与简单java类转换;
class Emp{
private String ename;
private String empno;
private String job;
private double sal;
private double comm;
private Emp mgr;//描述雇员领导
private Dept dept;//描述雇员所在部门
public Emp() {}
public Emp(String ename,String empno,String job,double sal,double comm) {
this.empno=empno;
this.ename=ename;
this.job=job;
this.sal=sal;
this.comm=comm;
}
public void setMgr(Emp mgr) {
this.mgr=mgr;
}
public Emp getMgr() {
return this.mgr;
}
public void setDept(Dept dept) {
this.dept=dept;
}
public Dept getDept() {
return this.dept;
}
public String getInfo() {
return "【Emp】ename :"+ename+"empno:"+empno+"job:"+job+"sal:"+sal+"comm:"+comm;
}
}
class Dept{
private int deptno;
private String dname;
private String loc;
private Emp[] emps;//所有雇员
public Dept() {}
public Dept(String dname,String loc,int deptno) {
this.deptno=deptno;
this.dname=dname;
this.loc=loc;
}
public void setEmps(Emp[]emps) {
this.emps=emps;
}
public Emp[] getEmps() {
return this.emps;
}
public String getIno() {
return "【Dept】deptno :"+deptno+"dname:"+dname+"loc:"+loc;
}
}
public class 一对多 {
}
那么此时基本的类定义完成了。
3.实现开发的需求。
class Emp{
private String ename;
private double empno;
private String job;
private int sal;
private int comm;
private Emp mgr;//描述雇员领导
private Dept dept;//描述雇员所在部门
public Emp() {}
public Emp(String ename,double empno,String job,int sal,int comm) {
this.empno=empno;
this.ename=ename;
this.job=job;
this.sal=sal;
this.comm=comm;
}
public void setMgr(Emp mgr) {
this.mgr=mgr;
}
public Emp getMgr() {
return this.mgr;
}
public void setDept(Dept dept) {
this.dept=dept;
}
public Dept getDept() {
return this.dept;
}
public String getInfo() {
return "【Emp】ename :"+ename+" empno: "+empno+"job:"+job+" sal:"+sal+" comm:"+comm;
}
}
class Dept{
private int deptno;
private String dname;
private String loc;
private Emp[] emps;//所有雇员
public Dept() {}
public Dept(String dname,String loc,int deptno) {
this.deptno=deptno;
this.dname=dname;
this.loc=loc;
}
public void setEmps(Emp[]emps) {
this.emps=emps;
}
public Emp[] getEmps() {
return this.emps;
}
public String getInfo() {
return "【Dept】deptno :"+deptno+" dname: "+dname+" loc: "+loc;
}
}
public class 一对多 {
public static void main (String args[]) {
//第一步:设置类对象的关系
//1.分别创建各自类的实例化对象
Dept dept =new Dept("ACCOUNTING","NEW YORK",10);//会计
Emp ea= new Emp("SMITH",007,"CLERK",900,0);//职员
Emp eb= new Emp("ALLEN",005,"MANAGER",2560,0);//经理
Emp ec= new Emp("KING",001,"PRESIDENT",5000,0);//总裁
//2.设置雇员领导的关系
ea.setMgr(eb);
eb.setMgr(ec);
//3.设置雇员和部门的关系
ea.setDept(dept);
eb.setDept(dept);
ec.setDept(dept);
//4.设置部门和雇员的关系
dept.setEmps(new Emp[] {ea,eb,ec});
//5. 一个部门有多少个雇员,并且可以输出一个部门的完整信息:(包括雇员信息)
//第二步:进行数据的取得
System.out.println(dept.getInfo());//输出部门信息
for(int x=0;x<dept.getEmps().length;x++) {
System.out.println("\n"+dept.getEmps()[x].getInfo());
if(dept.getEmps()[x].getMgr()!=null) {//有领导
System.out.println("\t|-"+dept.getEmps()[x].getMgr().getInfo());
}
}
System.out.println("====================================================");
//可以根据一个雇员找到雇员对应的领导信息和雇员所在部门的信息
System.out.println(eb.getMgr().getInfo());
if(eb.getMgr()!=null) {//有领导
System.out.println("\t|-"+eb.getMgr().getInfo());
}
if(eb.getDept()!=null) {
System.out.println("\t|-"+eb.getDept().getInfo());
}
}
}
这种关系的匹配以及数据的取出操作,是必须掌握的,也是日后开发的基本模式。
当我们把车也加入进去是如下的样子
class Emp{
private String ename;
private String empno;
private String job ;
private double sal;
private Emp mgr;
private Dept dept;
private Car car;
public Emp(){}
public Emp(String ename,String empno,String job,double sal) {
this.ename=ename;
this.empno=empno;
this.job=job;
this.sal=sal;
}
public void setCar(Car car) {
this.car=car;
}
public Car getCar() {
return this.car;
}
public void setMgr(Emp mgr) {
this.mgr=mgr;
}
public Emp getMgr() {
return this.mgr;
}
public void setDept(Dept dept) {
this.dept=dept;
}
public Dept getDept() {
return this.dept;
}
public String getInfo() {
return "【Emp】 ename: "+this.ename+" empno: "+this.empno+" job: "+this.job+" sal: "+this.sal;
}
}
class Car{
private String name;
private double price;
private Emp emp;
public Car() {}
public Car(String name,double price) {
this.name=name;
this.price=price;
}
public void setEmp(Emp emp){
this.emp=emp;
}
public Emp getEmp() {
return this.emp;
}
public String getInfo() {
return "【Car】 name :"+name+" price: "+price;
}
}
class Dept{
private String dname;
private String deptno;
private String loc;
private Emp emps[];
public Dept() {}
public Dept(String dname,String deptno,String loc) {
this.dname=dname;
this.deptno=deptno;
this.loc=loc;
}
public void setEmps(Emp []emps) {
this.emps=emps;
}
public Emp[] getEmps() {
return this.emps;
}
public String getInfo() {
return "【Dept】 dname: "+this.dname+" deptno: "+this.deptno+" loc: "+this.loc;
}
}
public class TestDemo{
public static void main(String agrs[]) {
Dept dept=new Dept("腾讯","123","深圳");
Emp ea=new Emp("ruce","13145","CLERK",150000.0);
Emp eb=new Emp("baga","1314520","MANAGER",250000.0);
Emp ec=new Emp("king","007","PERSIDENT",500000.0);
Car car=new Car("兰博基尼",100000000.0);
Car cc=new Car("玛莎拉蒂",2000000.0);
Car ccc=new Car("风之子",100000000.0);
car.setEmp(ea);
cc.setEmp(eb);
ccc.setEmp(ec);
ea.setCar(car);
eb.setCar(cc);
ec.setCar(ccc);
ea.setMgr(eb);
eb.setMgr(ec);
ea.setDept(dept);
eb.setDept(dept);
ec.setDept(dept);
dept.setEmps(new Emp[] {ea,eb,ec});
System.out.println(dept.getInfo());
for(int x=0;x<dept.getEmps().length;x++) {
System.out.println(dept.getEmps()[x].getInfo());
if(dept.getEmps()[x].getMgr()!=null) {
System.out.println("\n|-"+dept.getEmps()[x].getMgr().getInfo());
}
}
System.out.println("================================================");
System.out.println(eb.getMgr().getInfo());
System.out.println("================================================");
if(eb.getMgr()!=null) {
System.out.println("\n|-"+eb.getMgr().getInfo());
}if(eb.getDept()!=null) {
System.out.println("\n|-"+eb.getDept().getInfo());
}
//通过车找到车的人的公司
System.out.println(car.getEmp().getDept().getInfo());
//通过车找到车的人的公司的老板的车
System.out.println("\n|--"+car.getEmp().getMgr().getCar().getInfo());
System.out.println(cc.getEmp().getInfo());
}
}