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

简单Java类是现在面向对象设计的主要分析基础,但是对于实际开发之中简单Java类的定义来源是有依据的,往往都是根据数据表的结构来实现简单Java类。
在数据库之中实际上是提供有若干个数据表的,那么每一张实体数据表实际上都可以描述出一些具体的事物概念,比如:雇员信息表、部门信息表一看就知道描述的是雇员或部门的信息。
那么按照这个思路回到程序之中你会发现,程序类的定义形式实际上和这些实体表的差别并不大,所以在实际的开发之中数据表与简单Java类之间的基本映射关系如下:
数据实体表设计 = 类的定义;
表中的字段 = 类的成员属性;
表的外键关联 = 引用关联;
表的一行记录 = 类的一个实例化对象;
表的多行记录 = 对象数组。

在以上所对应的数据表的关系之中可以发现有如下的关联存在:
一个部门有多个雇员:
一个雇员属于一个部门:
一个雇员有一个领导:
下面将以上的数据表转为简单java类的定义形式,在整体的程序代码之中要求可以获得如下信息:
根据部门信息获得以下内容:
一个部门的完整信息:
一个部门之中所有雇员的完整信息:
一个雇员对应的领导的信息;
根据雇员信息获得以下内容:
一个雇员所在部门信息;
一个雇员对应的领导信息;
对于数据表与简单java类之间的映射最好的解决步骤:先抛开所有的关联字段不看,写出类的基本组成,而后再通过引用配置关联字段的关系。
第一步:分别定义Emp、Dept两个实体类

class Dept {private long dno ;private String dname ;private String loc ;public Dept(long dno, String dname, String loc){this.dno = dno ;this.dname = dname ;this.loc = loc ;}// setter、getter、无参构造lvepublic String getInfo(){return "【部门信息】部门编号 = " + this.dno + "、部门名称 = " + this.dname + "、部门位置 = " + this.loc ;}
}class Emp {private long empno ;private String ename ;private String job ;private double sal ;private double comm ;private 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、无参构造lvepublic String getInfo(){return "雇员编号 = " + this.empno + "、雇员名字 = " + this.ename + "、工作 = " + this.job + "、薪水 = " + this.sal + "、佣金 = " + this.comm ;}
}public class JavaDemo {public static void main(String args[]){}
}

第二步:配置所有关联字段

class Dept {private long dno ;private String dname ;private String loc ;private Emp emps [] ; 多个雇员信息public Dept(long dno, String dname, String loc){this.dno = dno ;this.dname = dname ;this.loc = loc ;}public void setEmps(Emp [] emps){this.emps = emps ;}public Emp [] getEmps(){return this.emps ;}// setter、getter、无参构造lvepublic String getInfo(){return "【部门信息】部门编号 = " + this.dno + "、部门名称 = " + 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 ;   //所属领导private 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、无参构造lvepublic 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 Dept getDept(){return this.dept ;}public Emp getMgr(){return this.mgr ;}
}public class JavaDemo {public static void main(String args[]){}
}

在以后进行实际项目开发的过程之中一定是分两个步骤实现的:
第一步:根据表的结构关系进行对象的配置
第二步:根据要求通过结构获取数据。
范例:项目实现要求

class Dept {private long dno ;private String dname ;private String loc ;private Emp emps [] ; //  多个雇员信息public Dept(long dno, String dname, String loc){this.dno = dno ;this.dname = dname ;this.loc = loc ;}public void setEmps(Emp [] emps){this.emps = emps ;}public Emp [] getEmps(){return this.emps ;}// setter、getter、无参构造lvepublic String getInfo(){return "【部门信息】部门编号 = " + this.dno + "、部门名称 = " + 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、无参构造lvepublic 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 Dept getDept(){return this.dept ;}public Emp getMgr(){return this.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(empA.getMgr().getInfo()) ;   //根据雇员获取领导信息}
}


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

综合实战:一对多映射

数据表与简单Java类(一对多)

按照表的要求将表的结构转换为类结构,同时可以获取如下信息:
1.获取一个分类的完整信息
2.可以根绝分类获取其对应的所有的子分类的信息

class Item {private long iid ;private String title ;private Subitem subitems [] ;public Item(long iid, String title){this.iid = iid ;this.title = title ;}public void setSubitems(Subitem subitems []){this.subitems = subitems ;}public Subitem [] getSubitem(){return this.subitems ;}public String getInfo(){return "【分类信息】iid = " + this.iid + "、title = " + this.title ;}
}
class Subitem {private long sid ;private String title ;private Item item ;public Subitem(long sid, String title){this.sid = sid ;this.title = title ;}public void setItem(Item item){this.item = item ;}public Item getItem(){return this.item ;}public String getInfo(){return "【子分类信息】sid = " + this.sid + "、title = " + this.title ;}
}public class JavaDemo {public static void main(String args[]){// 第一步:根据结构设置对象数据Item item = new Item(1L,"图书") ;Subitem subitems [] = new Subitem [] {new Subitem(10L,"编程图书"),new Subitem(10L,"图形图像类图书")} ;item.setSubitems(subitems) ;   //一个分类下有多个子分类for (int x = 0 ; x < subitems.length ; x ++){subitems[x].setItem(item) ;}//第二步:根据要求获取数据System.out.println(item.getInfo()) ;for (int x = 0; x < item.getSubitem().length ; x ++){System.out.println("\t|- " + item.getSubitem()[x].getInfo()) ;}}
}

综合实战:复杂多对多映射


将以上的结构转换为类结构,并且可以获取如下信息:
获取一个用户访问的所有商品的详细信息;
获取一个商品被浏览过得全部的用户信息;
对此时的程序只需要去考虑实体表的设计即可,也就是对于中间的访问记录信息表不要求你进行转换处理,之定义两个类。

class Member {private String mid ;private String name ;private Product products [] ;public Member(String mid, String name){this.mid = mid ;this.name = name ;}public void setProducts(Product products []){this.products = products ;}public Product [] getProducts(){return this.products ;}public String getInfo(){return "【用户信息】mid = " + this.mid + "、name = " + this.name ;}
}class Product {private long pid ;private String title ;private double price ;private Member members [] ;public Product(long pid, String title, double price) {this.pid = pid ;this.title = title ;this.price = price ;}public void setMembers(Member members[]){this.members = members ;}public Member [] getMembers(){return this.members ;}public String getInfo(){return "【商品信息】pid = " + this.pid + "、title = " + this.title + "、price = " + this.price ;}
}public class JavaDemo {public static void main(String args[]){// 第一步结构设置对象数据Member memA = new Member("mldn", "张三") ;Member memB = new Member("mldnjava", "李四") ;Product proA = new Product(1L,"Java开发图书", 79.8) ;Product proB = new Product(2L,"非常大的B的耳机", 2309.8) ;Product proC = new Product(3L,"小米手机", 3000.8) ;memA.setProducts(new Product[]{proA,proB,proC}) ;memB.setProducts(new Product[]{proA}) ;proA.setMembers(new Member[] {memA,memB}) ;proB.setMembers(new Member[] {memA}) ;proC.setMembers(new Member[] {memA}) ;// 第二步:根据要求获取数据System.out.println("------------根据用户查看浏览商品信息----------") ;System.out.println(proA.getInfo()) ;for (int x = 0; x < proA.getMembers().length ; x ++){System.out.println("\t|- " + proA.getMembers()[x].getInfo()) ;}System.out.println("------------根据商品找到被浏览的记录----------")  ;System.out.println(memA.getInfo()) ;for (int x = 0; x < memA.getProducts().length ; x ++){System.out.println("\t| " + memA.getProducts()[x].getInfo()) ;}}
}

综合实战:复杂多对多映射

在进行实际项目开发过程之中,对于用户的授权管理是一项重要的任务,下面给出了一个最为常见的用户权限管理的表结构设计,基本的关系如下:
一个用户可以拥有多个角色,一个角色可能有多个用户:
一个角色可以拥有多个权限:

要求实现如下查询功能:
可以根据一个用户找到该用户对应的所有角色,以及每一个角色对应的所有权限信息;
可以根据一个角色找到该角色下的所有权限,以及拥有此角色的全部用户信息;
可以根据一个权限找到具备有此权限的所有的用户信息;

class Member {private String mid ;private String name ;private Role roles [] ;public Member(String mid, String name){this.mid = mid ;this.name = name ;}public String getInfo(){return "【用户信息】mid = " + this.mid + "、name = " + this.name ;}public void setRoles(Role roles[]){this.roles = roles ;}public Role [] getRoles(){return this.roles ;}public Role [] getRole(){return this.roles ;}
}class Role {private long rid ;private String title ;private Member members [] ;private Privilege privileges [] ;public Role(long rid, String title){this.rid = rid ;this.title = title ;}public void setMembers(Member members []){this.members = members ;}public Member [] getMembers(){return this.members ;}public void setPrivileges(Privilege privileges []){this.privileges = privileges ;}public Privilege [] getPrivileges(){return this.privileges ;}public String getInfo(){return "【角色信息】rid = " + this.rid + "、title = " + this.title ;}
}class Privilege {private long pid ;private String title ;private Role role ;public Privilege(long pid, String title){this.pid = pid ;this.title = title ;}public String getInfo(){return "【权限信息】pid = " + this.pid + "、name = " + this.title ;}public void setRole(Role role){this.role = role ;}public Role getRole(){return this.role ;}
}public class JavaDemo {public static void main(String args[]){// 第一步:根据结构设置对象数据Member memA = new Member("mldn-a", "张三") ;Member memB = new Member("mldn-b", "李四") ;Role roleA = new Role(1L, "系统配置") ;Role roleB = new Role(2L, "备份管理") ;Role roleC = new Role(3L, "人事管理") ;Privilege priA = new Privilege(1000L, "系统初始化") ;Privilege priB = new Privilege(1001L, "系统系统还原") ;Privilege priC = new Privilege(1002L, "系统环境修改") ;Privilege priD = new Privilege(1003L, "备份员工数据") ;Privilege priE = new Privilege(1004L, "备份部门数据") ;Privilege priF = new Privilege(1005L, "备份公文数据") ;Privilege priG = new Privilege(1006L, "增加员工") ;Privilege priH = new Privilege(1007L, "编辑员工") ;Privilege priI = new Privilege(1008L, "浏览员工") ;Privilege priJ = new Privilege(1009L, "员工离职") ;// 增加角色与权限的对应关系roleA.setPrivileges(new Privilege[] {priA,priB,priC}) ;roleB.setPrivileges(new Privilege[] {priD,priE,priF}) ;roleC.setPrivileges(new Privilege[] {priG,priH,priI,priJ}) ;// 增加权限与角色的对应priA.setRole(roleA) ;priB.setRole(roleA) ;priC.setRole(roleA) ;priD.setRole(roleB) ;priE.setRole(roleB) ;priF.setRole(roleB) ;      priG.setRole(roleC) ;priH.setRole(roleC) ;      priI.setRole(roleC) ;priJ.setRole(roleC) ;      // 增加用户与角色的对应关系memA.setRoles(new Role [] {roleA, roleB}) ;memB.setRoles(new Role [] {roleA, roleB, roleC}) ;roleA.setMembers(new Member [] {memA, memB}) ;roleB.setMembers(new Member [] {memA, memB}) ;roleC.setMembers(new Member [] {memB}) ;// 第二步:根据要求获取数据System.out.println("--------- 通过用户查找信息--------") ;System.out.println(memB.getInfo()) ;for (int x = 0; x < memB.getRoles().length; x ++){System.out.println("\t|- " + memB.getRoles()[x].getInfo()) ;for (int y = 0; y < memB.getRoles()[x].getPrivileges().length ; y ++){System.out.println("\t\t - " + memB.getRoles()[x].getPrivileges()[y].getInfo()) ;}}System.out.println("-------- 通过角色查找信息---------") ;System.out.println(roleB.getInfo()) ;System.out.println("\t|- 浏览此角色下的所有权限信息:" ) ;for (int x = 0; x < roleB.getPrivileges().length ; x ++){System.out.println("\t|- " + roleB.getPrivileges()[x].getInfo()) ;}System.out.println("\t|- 浏览此角色下的所有用户信息:" ) ;for (int x = 0; x < roleB.getMembers().length ; x ++){System.out.println("\t\t- " + roleB.getMembers()[x].getInfo()) ;}System.out.println("-------- 通过权限查找信息 ---------" ) ;System.out.println(priA.getInfo()) ;for (int x = 0; x < priA.getRole().getMembers().length ; x ++){System.out.println("\t|- " + priA.getRole().getMembers()[x].getInfo()) ;}}
}

数据表与简单Java类映射转换相关推荐

  1. 数据表与简单Java类映射转换(一对多、多对多、角色与权限) - Java基础知识 6

                                                            目录 数据表与简单Java类映射转换 一对多映射 多对多映射 角色与权限 学习笔记 数据 ...

  2. Java 第9 章 : 数据表与简单Java类映射转换

    课时38:综合实战:数据表与简单Java类映射转换 简单Java类是现在面向对象设计的主要分析基础,但是对于实际的开发之中简单Java类的定义来源是有依据的,往往都是根据数据标的结构来实现简单Java ...

  3. 部门与雇员-数据表与简单Java类映射转换

    // 部门与雇员--数据表与简单Java类映射转换 package com.demo; //部门 class Dept {     private long deptno ; //部门编号     p ...

  4. java引用其他类的数据头文件_Java 实现数据表与简单Java类映射转换

    我们在程序开发过程中往往会使用简单Java类进行数据表结构的描述,本文主要介绍如何简单Java类与数据表之间的转换. 首先,先简单介绍一下数据表与简单Java类的相关概念对比: 表的定义 → 实体表设 ...

  5. #Java笔记 #程序实现:数据表与简单Java

    刚开始学JAVA,从笔记做起! program 2 数据表与简单Java映射 目的 这实际上是我自己写的第一个Java程序,实现了比较简单的一个想法,还是特别开心的. <第一行代码 JAVA&g ...

  6. java 数据对_数据表与简单java类(一对多)

    emp表:empno,ename,job,sal,comm,mgr,deptno dept表:deptno,dname,loc 要求可以通过程序描述出如下对应关系 一个部门有多个部员,并且可以输出一个 ...

  7. 简单Java类映射转换

    现有部门和雇员两个关系表: 数据表之间的对应信息为: 一个部门有多个雇员: 一个雇员属于一个部门: 一个雇员有一个领导: 在简单Java类中实现,要求可以: 根据部门信息获得以下内容 一个部门的完整信 ...

  8. java查询mysql装载bean_jsp与javabean链接mysql数据库并查询数据表的简单实例源码

    jsp与javabean链接mysql数据库并查询数据表的简单实例源码.这个简单的实例是给新手学习的,或者一些高手临时忘记怎么使用jsp操作mysql数据库时候查找的,包括了建立mysql数据库连接的 ...

  9. java 实现内存数据表_数据结构 Java中的内存

    根据线性表的实际存储方式,分为两种实现模型: 顺序表 ,将元素顺序地存放在一块连续的存储区里,元素间的顺序关系由它们的存储顺序自然表示. 链表 ,将元素存放在通过链接构造起来的一系列存储块中. 一.顺 ...

最新文章

  1. C#基础—不安全代码(unsafe code)
  2. 鸿蒙开发-使用fetch发起网络请求
  3. LiveVideoStack线上分享第五季(三):新一代直播传输协议SRT
  4. (五)门级电路低功耗设计优化
  5. BZOJ1857:[SCOI2010]传送带——题解
  6. Qt实践|HTTP知识点-使用百度AI语音识别服务
  7. 【爬虫剑谱】一卷2章 软件篇-EdgeDriver的安装及配置
  8. quartz锁表misfire的处理策略设置
  9. Django之form组件加cookie,session
  10. 【转】掌握java枚举类型(enum type)
  11. 医疗保险管理系统设计 Java
  12. qt.qpa.xcb: could not connect to display解决
  13. 部分可重构系统中可能发生的几个不良现象及解决方法(解耦) Xilinx FPGA DFX Partial Reconfig Decouple
  14. ROS Spinning-----简介
  15. OceanBase发布“珊瑚计划”,让合作伙伴成为OceanBase成功的关键
  16. Python——永久存储:腌制一缸美味的泡菜
  17. 台式计算机win如何联网,Win10台式机怎么连接无线网(wifi)?
  18. c语言volatile含义,c语言中volatile关键字是什么含义怎么办呢?
  19. 软件系统设计-17-架构评估
  20. matlab如何表示抗混叠滤波,Matlab在多采样率信号处理教学中的应用

热门文章

  1. Linux 下如何压缩/解压缩文件
  2. C语言实现字符串在屏幕上滚动
  3. 关于st25系列NFC标签简单介绍及st25TV系列用于门禁读取时的注意事项总结
  4. linux的system函数命令大全,Linux下system函数
  5. CSS、HTML补充
  6. 雷军一往无前的十年(小米十周年公开演讲)附赠《一往无前》电子书籍
  7. FreeSWITCH 与 Asterisk(译)
  8. python re import_完全搞懂Python 中的 import 与 from import
  9. 业务系统如何集成工作流系统?_K2 BPM集成能力讲解
  10. 【复杂网络】自学笔记整理