38-综合实战:数据表与简单Java类映射转换

    简单Java类是现在面向对象设计的主要分析基础,但是对于实际的开发之中简单Java类的定义来源是有依据的,往往都是根据数据表的结构来实现简单Java类。

    在数据库之中实际上是提供有若干个数据表的,那么每一张实体数据表实际上都可以描述出一些具体的事物概念,例如:雇员信息表、部门信息表,一看就知道描述的就是雇员或部门的信息。

    那么按照这个思路回到程序之中你会发现,程序类的定义形式实际上和这些实体表的差别并不大,所以在实际的项目开发之中数据表与简单Java类之间的基本映射关系如下:

  • 数据实体表设计 = 类的定义;

  • 表中的字段 = 类的成员属性;

  • 表的外键关联 = 引用关联;

  • 表的一行记录 = 类的一个实例化对象;

  • 表的多行记录 = 对象数组;

    在以上所对应数据表的关系之中可以发现有如下的关联存在:

  • 一个部门有多个雇员;

  • 一个雇员属于一个部门;

  • 一个雇员有一个领导;

    下面将以上的数据表转为简单java类的定义形式,在整体的程序代码之中要求可以获得如下信息:

  • 根据部门信息获得以下内容:

    |- 一个部门的完整信息;

    |- 一个部门之中所有雇员的完整信息;

    |- 一个雇员对应的领导的信息;

  • 根据雇员信息获得以下内容:

    |- 一个雇员所在的部门信息;

    |- 一个雇员对应的领导信息;

    对于数据表与简单java类之间的映射最好的解决步骤:先抛开所有的关联字段不看,写出类的基本组成,而后再通过引用配置关联字段的关系。

第一步:分别定义Emp、Dept两个实体类


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 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 setEmps(Emp[] emps){

        this.emps = emps;

    }

    public Emp[] getEmps(){

        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;

    }

    //  setter、getter、无参构造略

    public String getInfo(){

        return "【雇员信息】雇员编号 =" + this.empno + "、雇员姓名 = " + this.ename + "、雇员职位 = " + this.job + "、基本工资 = " + this.sal + "、佣金 = " + this.comm;

    }

    public void setDept(Dept dept){

        this.dept = dept;

    }

    public void setMgr(Emp mgr){

        this.mgr = mgr;

    }

}

    在以后进行实际项目开发的过程之中一定是分两个步骤实现的:

  • 第一步:根据表的结构关系进行对象的配置;

  • 第二步:根据要求通过结果获取数据。

范例:实现项目开发要求


public class JavaDemo{

    public static void main(String args[]){

        // 第一步:根据关系进行类的定义

        // 定义出各个的实例化对象,此时并没有任何的关联定义

        Dept dept = new Dept(10,"财务部","上海");

        Emp empA = new Emp(7369L,"SMITH","CLERK",800.00,0.0);

        Emp empB = new Emp(7566L,"FORD","MANAGER",2450.00,0.0);

        Emp empC = new Emp(7839L,"KING","PRESIDENT",5000.00,0.0);

        // 需要为对象进行关联的设置

        empA.setDept(dept); //设置雇员与部门的关联

        empB.setDept(dept); //设置雇员与部门的关联

        empC.setDept(dept); //设置雇员与部门的关联

        empA.setMgr(empB);  //设置雇员与领导的关联

        empB.setMgr(empC);  //设置雇员与领导的关联

        dept.setEmps(new Emp[]{empA,empB,empC}); //部门与雇员

        //第二步:根据关系获取数据

        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());

            }

        }

        System.out.println("--------------------------------------------");

        System.out.println(empB.getDept().getInfo());  //根据雇员获取部门信息

        System.out.println(empB.getMgr().getInfo());   //根据雇员获取领导信息

    }   

}

    在以后的开发之中这种转换的定义形式一定是要熟练完成的。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容