不积跬步,无以至千里;不积小流,无以成江海。
Java语言基础
Java的数据表与简单Java类的映射
基本映射关系:
数据实体表设计 = 类的定义
表中的字段 = 类的成员属性
表的外键关联 = 引用关联
表的一行数据 = 类的一个实例化对象
表的多行数据 = 对象数组
示例一:
表一:部门(部门编号、部门名称、部门位置)
表二:雇员(雇员编号、部门编号、姓名、职位、基本工资、佣金、领导编号)
关联:
一个部门多个雇员;
一个雇员属于一个部门;
一个雇员有一个领导
要求:
根据部门信息获得:
一个部门完整信息;
一个部门雇员的完整信息;
一个雇员对应的领导的信息;
根据雇员信息获得:
一个雇员所在的部门信息;
一个雇员的领导信息
class Dept{ private long deptno; private String dname; private String location; private Emp emps[]; // 一个部门多个雇员信息 public Dept(long deptno, String dname, String location) { this.deptno = deptno; this.dname = dname; this.location = location; } public String getInfo() { return "【部门信息】 部门编号:" + this.deptno + "、部门名称:" + this.dname + "、部门位置:" + this.location; } public void setEmps(Emp emps[]) { this.emps = emps; } public Emp [] getEmps() { return this.emps; } } class Emp{ private long empno; private String ename; private String job; private double sal; private double comm; private Dept dept; // 所属部门 private Emp mgrEmp; // 所属领导 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.empno + "、雇员姓名:" + this.ename + "、雇员职位:" + this.job + "、基本工资" + this.sal + "、佣金:" + this.comm; } public void setDept(Dept dept) { this.dept = dept; } public void setMgr(Emp mgrEmp) { this.mgrEmp = mgrEmp; } public Dept getDept() { return this.dept; } public Emp getMgr() { return this.mgrEmp; } } public class CompDemo { public static void main(String[] args) { // TODO Auto-generated method stub // 定义实例化对象,此时并没有关联定义 Dept dept = new Dept(10, "财务部", "上海"); Emp empA = new Emp(10000L, "Jiang", "clerk", 10000.0, 0.0); Emp empB = new Emp(10000L, "Wen", "manager", 20000.0, 0.0); Emp empC = new Emp(10000L, "Jie", "president", 30000.0, 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 i = 0; i < dept.getEmps().length; i++) { System.out.println("|-" + dept.getEmps()[i].getInfo()); // 雇员领导信息 if(dept.getEmps()[i].getMgr() != null) { System.out.println(" |-" + dept.getEmps()[i].getMgr().getInfo()); } } System.out.println("--------------------------------"); // 根据雇员获取部门信息 System.out.println(empA.getDept().getInfo()); // 根据雇员获取领导 System.out.println(empA.getMgr().getInfo()); } }
程序输出:
【部门信息】 部门编号:10、部门名称:财务部、部门位置:上海 |-【雇员信息】 雇员编号:10000、雇员姓名:Jiang、雇员职位:clerk、基本工资10000.0、佣金:0.0 |-【雇员信息】 雇员编号:10000、雇员姓名:Wen、雇员职位:manager、基本工资20000.0、佣金:0.0 |-【雇员信息】 雇员编号:10000、雇员姓名:Wen、雇员职位:manager、基本工资20000.0、佣金:0.0 |-【雇员信息】 雇员编号:10000、雇员姓名:Jie、雇员职位:president、基本工资30000.0、佣金:0.0 |-【雇员信息】 雇员编号:10000、雇员姓名:Jie、雇员职位:president、基本工资30000.0、佣金:0.0 -------------------------------- 【部门信息】 部门编号:10、部门名称:财务部、部门位置:上海 【雇员信息】 雇员编号:10000、雇员姓名:Wen、雇员职位:manager、基本工资20000.0、佣金:0.0
示例二:
表一:用户(用户ID、姓名)
表二:角色(角色ID、名称)
标三:权限(权限ID、角色ID、名称)
关联:
一个用户可以有多个角色;
一个角色可以有多个用户;
一个角色可以有多个权限。
要求:
一个用户可以找到对应的角色,以及每个角色对应的权限;
根据角色找到该角色下的所有权限,以及用于此角色的所有用户信息;
根据一个权限找到拥有此权限的所有用户信息。
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 setRole(Role roles[]) { this.roles = roles; } public Role [] getRole() { return this.roles; } } class Role{ private long rid; private String title; private Member mems[]; // 一个角色有多个用户 private Privilege privileges[]; //一个角色拥有多个权限 public Role(long rid, String title) { this.rid = rid; this.title = title; } public String getInfo() { return "【角色信息】rid = " + this.rid + "、title = " + this.title; } public void setMem(Member mems[]) { this.mems = mems; } public void setPriv(Privilege privileges[]) { this.privileges = privileges; } public Member [] getMem() { return mems; } public Privilege [] getPriv() { return privileges; } } class Privilege{ private long pid; private String title; private Role roles[]; // 一个权限属于多个角色 public Privilege(long pid, String title) { this.pid = pid; this.title = title; } public String getInfo() { return "【权限信息】 pid = " + this.pid + "、title = " + this.title; } public void setRole(Role roles[]) { this.roles = roles; } public Role [] getRole() { return roles; } } public class JavaDemo { public static void main(String[] args) { // TODO Auto-generated method stub // 根据结构设置对象数据 Member memA = new Member("a", "Jiang"); Member memB = new Member("b", "Wen"); Role roleA = new Role(1L, "系统配置"); Role roleB = new Role(2L, "备份管理"); Role roleC = new Role(3L, "人事管理"); Privilege privA = new Privilege(1000L, "系统初始化"); Privilege privB = new Privilege(1001L, "系统维护"); Privilege privC = new Privilege(2001L, "备份员工数据"); Privilege privD = new Privilege(2002L, "备份部门数据"); Privilege privE = new Privilege(3001L, "编辑员工信息"); Privilege privF = new Privilege(3002L, "浏览员工信息"); // 增加角色与权限的对应关系 roleA.setPriv(new Privilege[] {privA, privB}); roleB.setPriv(new Privilege[] {privC, privD}); roleC.setPriv(new Privilege[] {privE, privF}); // 增加权限与角色的对应关系 privA.setRole(new Role[] {roleA}); privB.setRole(new Role[] {roleA}); privC.setRole(new Role[] {roleB}); privD.setRole(new Role[] {roleB}); privE.setRole(new Role[] {roleC}); privF.setRole(new Role[] {roleC}); // 增加用户与角色的对应关系 memA.setRole(new Role[] {roleA, roleB}); memB.setRole(new Role[] {roleA, roleB, roleC}); roleA.setMem(new Member[] {memA, memB}); roleB.setMem(new Member[] {memA, memB}); roleC.setMem(new Member[] {memB}); System.out.println("---------通过用户查找信息---------"); System.out.println(memA.getInfo()); for (int i = 0; i < memA.getRole().length; i++) { System.out.println("--" + memA.getRole()[i].getInfo()); for (int j = 0; j < memA.getRole()[i].getPriv().length; j++) { System.out.println("----" + memA.getRole()[i].getPriv()[j].getInfo()); } } System.out.println("---------通过角色查找信息---------"); System.out.println(roleB.getInfo()); System.out.println("浏览此角色下的权限信息"); for (int i = 0; i < roleB.getPriv().length; i++) { System.out.println("--" + roleB.getPriv()[i].getInfo()); } System.out.println("浏览此角色下的用户信息"); for (int i = 0; i < roleB.getMem().length; i++) { System.out.println("--" + roleB.getMem()[i].getInfo()); } System.out.println("---------通过权限查找用户信息---------"); System.out.println(privA.getInfo()); for (int i = 0; i < privA.getRole().length; i++) { for (int j = 0; j < privA.getRole()[i].getMem().length; j++) { System.out.println(privA.getRole()[i].getMem()[j].getInfo()); } } } }