数据表与简单java转换/数据表与简单java类映射(一对多)

本文介绍如何在Java中通过简单类实现数据库表的一对多关系映射,包括类的设计原则及具体实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据表与简单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());

	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值