目录

数据表与简单Java类映射转换

一对多映射

多对多映射

角色与权限


学习笔记

数据表与简单Java类映射转换

简单Java是学习到现在面向对象的简单Java类设计基础,但是对于实际开发中,简单Java类的定义有依据的,根据数据表的结构来实现简单Java类。

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

那么按照这个思路,程序类的设计和这些实体表的设计差别不大;所以在实际的开发之中数据表与简单Java类之间的映射关系如下:

  • 数据表的设计 = 类的定义 ;
  • 表中的字段 = 类的成员属性 ;
  • 表的外键关联 = 引用实现;
  • 表的一行记录 = 类的一个实例化对象 ;
  • 表的多行记录 = 对象数组 ;

以上图中可以发现如下关联关系:

  • 一个部门可以对应多个部员;
  • 一个雇员属于一个部门 ;
  • 一个雇员有一个领导 ;

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

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

|- 一个部门完整信息

|- 一个部门中所有雇员的信息

|- 一个雇员的领导信息

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

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

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

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

第一步:定义Empt、Dept 实体类

class Dept{private long deptno ; //描述数据表主键时候建议类型用longprivate String dname ;private String loc ;public Dept(){}public Dept(long deptno, String dname, String loc){this.deptno = deptno ;this.dname = dname ;this.loc = loc ;}public String getInfo(){return "【部门信息】部门编号:" + this.deptno + "、部门名称:" + this.dname +"、部门位置:" + this.loc ;}//setter、getter略
}class Emp{private long empno ;private String ename ;private String job ;private double sal ;private double comm ;public Emp(){}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 ;}public String getInfo(){return "【雇员信息】雇员编号:" + this.ename +"、雇员名字:" + this.ename +"、雇员职位:" + this.job +"、基本工资:" + this.sal +"、佣金:" + this.comm ;}//setter getter 略
}public class ArrayDemo{public static void main(String args[]){}
}

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

class Dept{private long deptno ; //描述数据表主键时候建议类型用longprivate String dname ;private String loc ;private Emp emps [] ;public Dept(){}public Dept(long deptno, String dname, String loc){this.deptno = deptno ;this.dname = dname ;this.loc = loc ;}public void setEmp(Emp [] emps){this.emps = emps ;}public Emp [] getEmp(){return this.emps ;}public String getInfo(){return "【部门信息】部门编号:" + this.deptno + "、部门名称:" + this.dname +"、部门位置:" + this.loc ;}//setter、getter略
}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(){}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 ;}public void setDept(Dept dept){this.dept = dept ;}public void setMgr(Emp mgr){this.mgr = mgr ; }public Dept getDeept(){return this.dept ;}public Emp getMgr(){return this.mgr ;}public String getInfo(){return "【雇员信息】雇员编号:" + this.ename +"、雇员名字:" + this.ename +"、雇员职位:" + this.job +"、基本工资:" + this.sal +"、佣金:" + this.comm ; }//setter getter 略
}public class ArrayDemo{public static void main(String args[]){}
}

在以后项目开发中,一定分两个步骤实现的:

  • 第一步:根据表的结构关系进行表的配置(本文分第一、二步);
  • 第二步:根据要求根据结构获取数据 ;

范例:实现项目的开发要求

class Dept{private long deptno ; //描述数据表主键时候建议类型用longprivate String dname ;private String loc ;private Emp emps [] ;public Dept(){}public Dept(long deptno, String dname, String loc){this.deptno = deptno ;this.dname = dname ;this.loc = loc ;}public void setEmp(Emp [] emps){this.emps = emps ;}public Emp [] getEmp(){return this.emps ;}public String getInfo(){return "【部门信息】部门编号:" + this.deptno + "、部门名称:" + this.dname +"、部门位置:" + this.loc ;}//setter、getter略
}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(){}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 ;}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 String getInfo(){return "【雇员信息】雇员编号:" + this.ename +"、雇员名字:" + this.ename +"、雇员职位:" + this.job +"、基本工资:" + this.sal +"、佣金:" + this.comm ; }//setter getter 略
}public class ArrayDemo{public static void main(String args[]){// 第一步:根据关系进行类的定义, 定义出各个关系的实例化对象,此时没有任何的关联定义Dept dept = new Dept(10, "财务部", "上海");Emp empA = new Emp(5478L, "张三", "程序员", 800.00, 0.0) ;Emp empB = new Emp(2478L, "李四", "事务员", 500.00, 1320.0) ;Emp empC = new Emp(5478L, "王五", "KING", 5430.00, 450.0) ;// 进行关联设计empA.setDept(dept) ; // 设置部员与部门的关联empB.setDept(dept) ;empC.setDept(dept) ;empA.setMgr(empC) ; // 设置部员与领导的关联empB.setMgr(empC) ;dept.setEmp(new Emp [] {empA, empB, empC} ) ; // 设置部门与雇员的关联// 第二步:根据关系获取数据System.out.println(dept.getInfo()) ;for (int i = 0; i < dept.getEmp().length ; i ++){System.out.println( "\t|- " + dept.getEmp()[i].getInfo() ) ;if(dept.getEmp()[i].getMgr() != null){System.out.println("\t\t|-【领导信息】" + dept.getEmp()[i].getMgr().getInfo()) ;}}System.out.println("----------------------------------------------");System.out.println(empA.getDept().getInfo()) ;System.out.println(empB.getDept().getInfo()) ;System.out.println(empC.getDept().getInfo()) ;}
}

这种转换形式需要熟练的掌握,牵扯到引用和代码链的使用。

一对多映射

按照要求将表结构转换为类结构,同时获取如下信息:

  • 获取一个完整的分类信息
  • 可以根据分类获取其对应的所有子类信息

class Item{private long iid ;private String title ;private SubItem subItems [] ;public Item(){}public Item(long iid, String title){this.iid = iid ;this.title = title ;}public void setSubItems(SubItem subItems []){this.subItems = subItems ;}public SubItem [] getSubItems(){return this.subItems ;}public String getInfo(){return "【分类信息】分类ID: " + this.iid +"、分类名称:" + this.title ;}// setter getter略
}class SubItem{private long sid ;private String title ;private Item item;public SubItem(){}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 "【子分类信息】分类id: " + this.sid +"、分类名称:" + this.title ; }//setter getter 略}public class ArrayDemo{public static void main(String args[]){// 第一步: 根据结构设置设置数据Item item = new Item(12343L, "java");SubItem subitems [] = new SubItem [] {new SubItem(13453L, "基础知识"),new SubItem(56443L, "引用知识"),new SubItem(87543L, "高级特性")} ;item.setSubItems(subitems) ;for (int i = 0; i < subitems.length ; i ++){subitems[i].setItem(item) ;}// 第二步 : 获取数据System.out.println(item.getInfo()) ;for (int i = 0; i < item.getSubItems().length ; i++){System.out.println("\t|- " + item.getSubItems()[i].getInfo()) ;}}
}

多对多映射

此时这个程序只需要考虑实体表的设计即可,也就是说对于中间的访问信息表不要求进行转换处理,只需要定义两个类。

class Member{private String mid ;private String name ;private Product products [] ;public Member(){}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 "【用户信息】Id:" + this.mid +"、姓名:" + this.name ;}//setter getter 略
}class Product{private long pid ;private String title ;private double price ;private Member members[] ;public Product(){}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 "【商品信息】ID:" + this.pid +"、名称:" + this.title +"、价格:" + this.price ;}//setter getter 略
}public class ArrayDemo{public static void main(String args[]){// 第一步: 根据结构设置对象数组Member memA = new Member("575", "张三") ;Member memB = new Member("577", "李四") ;Product proA = new Product(1L, "java开发", 79.8) ; Product proB = new Product(2L, "耳机", 2479.8) ;Product proC = new Product(3L, "手机", 3079.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(memA.getInfo()) ;for (int i = 0; i < memA.getProducts().length ; i++ ){System.out.println("\t|- " + memA.getProducts()[i].getInfo()) ;}System.out.println("----------根据商品找到被浏览信息----------") ;System.out.println(proA.getInfo()) ;for (int i = 0; i < proA.getMembers().length ; i++ ){System.out.println("\t|- " + proA.getMembers()[i].getInfo()) ;}}
}

角色与权限

四个表但是定义三个类,关系表不作为一个类的出现。

class Member{private String mid ;private String name ;private Role roles [] ;public Member(){}public Member(String mid, String name ){this.mid = mid ;this.name = name ;}public void setRoles(Role roles []){this.roles = roles ;}public Role [] getRoles(){return this.roles ;}public String getInfo(){return "【用户信息】ID:" + this.mid + "、名称:" + this.name ;}// setter getter略
}
class Role{private long rid ;private String title;private Member members [];private Privilege privileges [] ;public Role(){}public Role(long rid, String title){this.rid = rid ;this.title = title ;}public void setMembers(Member members []){this.members = members;}public void setPrivileges(Privilege privileges []){this.privileges = privileges ;}public Member [] getMembers(){return this.members ;}public Privilege [] getPrivileges(){return this.privileges ;}public String getInfo(){return "【角色信息】ID:" + this.rid + "、名称:" + this.title ;}// setter getter略
}class Privilege{private long pid ;private String title ;private Role role ;public Privilege(){}public Privilege(long pid, String title){this.pid = pid ;this.title = title ;}public void setRole(Role role){this.role =role ;}public Role getRole(){return this.role ;}public String getInfo(){return "【权限信息】ID:" + this.pid +"、名称:" + this.title ;        }// setter getter略
}public class ArrayDemo{public static void main(String args[]){// 第一步: 根据结构设置对象数组Member memA = new Member("4566", "张三") ;Member memB = new Member("5466", "李四") ;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(2000L, "备份员工数据") ;Privilege priE = new Privilege(2001L, "备份部门数据") ;Privilege priF = new Privilege(2002L, "备份公文数据") ;Privilege priG = new Privilege(3000L, "增加员工") ;Privilege priH = new Privilege(3001L, "编辑员工") ;Privilege priI = new Privilege(3002L, "浏览员工") ;Privilege priJ = new Privilege(3003L, "员工离职") ;// 增加角色与权限的对应关系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(memA.getInfo()) ;for (int i = 0 ; i < memA.getRoles().length ; i ++ ){System.out.println("\t|- " + memA.getRoles()[i].getInfo()) ;for (int j = 0; j < memA.getRoles()[i].getPrivileges().length ; j ++){System.out.println("\t\t|- " + memA.getRoles()[i].getPrivileges()[j].getInfo()) ;}}System.out.println("-----------根据角色查找信息--------") ;System.out.println(roleA.getInfo() ) ;System.out.println("\t|- 浏览此角色下的所有权限信息") ;for (int i = 0; i < roleA.getPrivileges().length ; i++){System.out.println("\t\t|- " + roleA.getPrivileges()[i].getInfo());}System.out.println("\t|- 浏览此角色下的所有用户信息") ;for (int i = 0 ; i < roleA.getMembers().length; i++ ){System.out.println("\t\t|- " + roleA.getMembers()[i].getInfo()) ;}System.out.println("-----------根据权限查找信息--------") ;System.out.println(priA.getInfo() ) ;for (int i = 0 ; i < priA.getRole().getMembers().length; i++){System.out.println("\t|- " +priA.getRole().getMembers()[i].getInfo() );}}
}

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

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

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

  2. 数据表与简单Java类映射转换

    综合实战:数据表与简单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查询mysql装载bean_jsp与javabean链接mysql数据库并查询数据表的简单实例源码

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

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

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

  8. 简单Java类映射转换

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

  9. django orm级联_Django数据表关联关系映射(一对一、一对多、多对多)

    我们知道涉及到数据表之间的对应关系就会想到一对一.一对多.多对多,在学习 MySQL 数据库时表关系设计是需要重点掌握的知识.Django 中定义了三种关系类型的字段用来描述数据库表的关联关系:一对多 ...

最新文章

  1. haystack全文检索框架
  2. windows服务器指定IP地址才能进行远程访问桌面设置方法
  3. mysql 最长字符串_那些年的Mysql
  4. pom.xml增加依赖
  5. APNIC执委赵巍:IPv4向IPv6过渡再无退路
  6. ProgressDialog知识要点
  7. 计算机网络(二十五)-IP数据报格式
  8. Node.js:中间件——express简单的错误处理日志中间件
  9. [python]LDA模型使用流程及代码
  10. 关于大内存(大于4G)支持的问题
  11. 基于kinect的人体动作识别系统
  12. 四川锦城学院计算机专业好不,四川大学锦城学院计算机专业如何?
  13. 无法打开内核设备“\\.\VMCIDev\VMX”: 操作成功完成。是否在安装 VMware Workstation 后重新引导? 模块“DevicePowerOn”启动失败。 未能启动虚拟机。
  14. 计算机运行游戏卡顿,Win7电脑玩游戏出现卡顿如何解决?
  15. Excel VBA:设置单元格边框
  16. 明解C语言入门篇练习题第十三章
  17. 复旦计算机博士论文,2019年复旦大学历届全国优秀博士学位论文入选情况.doc
  18. 彻底卸载SQL Server2017
  19. 【黑盒测试】场景法和错误推断法
  20. day04-图片、列表、超链接标签及属性

热门文章

  1. 使用openssl生成crt证书
  2. 夯实Java基础系列22:一文读懂Java序列化和反序列化
  3. 直立车想节能——2020全国大学生智能车车竞赛经验记录之梦的开始
  4. Postman安装与基本操作
  5. VUE、JS判断当前是早上,中午,下午还是晚上
  6. 服务器显示蜘蛛,解决因服务器而导致的蜘蛛抓取失败
  7. Word 中添加目录的一般方法
  8. 2022 第十四届蓝桥杯模拟赛第一期(题解与标程)
  9. 爱 的 契 约 写给正在感情纠葛的三人
  10. 计算机 英文论文引言,英语计算机论文引言的名物化及其功能研究