Java中的[多对多]映射关联关系

来源:互联网 发布:数据库运行管理 编辑:程序博客网 时间:2024/06/10 14:59

1:Admin

package com.mldn.demo;
//管理员
public class Admin {
  private String aid;//用户名
  private String password;//密码
  private Role role;//一个管理员属于一个角色
  public Admin() {
  }
  public Admin(String aid, String password) {
this.aid = aid;
this.password = password;
  }
  public String getAid() {
return aid;
  }
  public void setAid(String aid) {
this.aid = aid;
  }
  public String getPassword() {
return password;
  }
  public void setPassword(String password) {
this.password = password;
 }
  public Role getRole() {
return role;
}
public void setRole(Role role) {
this.role = role;
}
public String getInfo(){
return "\t管理员编号: "+this.aid+"\t管理员密码: "+this.password;
 }
}


2:Role

package com.mldn.demo;
//角色
public class Role {
private int rid;
private String title;
private Admin[] admins;//一个角色有多个管理员
private Group[] groups;//一个角色有多个权限组
public Role() {
}
public Role(int rid, String title) {
this.rid = rid;
this.title = title;
}
public int getRid() {
return rid;
}
public void setRid(int rid) {
this.rid = rid;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Admin[] getAdmins() {
return admins;
}
public void setAdmins(Admin[] admins) {
this.admins = admins;
}
public Group[] getGroups() {
return groups;
}
public void setGroups(Group[] groups) {
this.groups = groups;
}
public String getInfo(){
return "\t角色编号: "+this.rid+"\t角色标题ti: "+this.title;
}
}


3:Group类


 package com.mldn.demo;
//权限组
public class Group {
private int gid;
private String title;
private Role[] roles;//一个权限组有多个角色
private RoleGroup[] roleGroups;//一个权限组有多个"角色_权限组"
public Group() {
}
public Group(int gid, String title) {
this.gid = gid;
this.title = title;
}
public int getGid() {
return gid;
}
public void setGid(int gid) {
this.gid = gid;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Role[] getRoles() {
return roles;
}
public void setRoles(Role[] roles) {
this.roles = roles;
}
public RoleGroup[] getRoleGroups() {
return roleGroups;
}
public void setRoleGroups(RoleGroup[] roleGroups) {
this.roleGroups = roleGroups;
}
public String getInfo(){
return "\t权限组编号: "+this.gid+"\t权限组标题ti: "+this.title;
   }
}


4:RoleGroup类


package com.mldn.demo;
//角色_权限组
public class RoleGroup {
private int rid;
private String title;
private String url;
private Group group;//一个"角色_权限组"属于一个权限
private Role role;//一个"角色_权限组"属于一个角色
public RoleGroup() {
}
public RoleGroup(int rid, String title, String url) {
this.rid = rid;
this.title = title;
this.url = url;
}
public int getRid() {
return rid;
}
public void setRid(int rid) {
this.rid = rid;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public Group getGroup() {
return group;
}
public void setGroup(Group group) {
this.group = group;
}
public Role getRole() {
return role;
}
public void setRole(Role role) {
this.role = role;
}
public String getInfo(){
return "\t角色_权限组编号: "+this.rid+"\t角色_权限组标题ti: "+this.title+"路径: "+this.url;
   }
}


5:Test


package com.mldn.demo;
/**
 * Java中的[多对多]映射关联关系:Admin(管理员)-Role(角色)-Group(权限组)-Role_Group(权限角色组)
 *  要求:
 *    1)可以根据一个管理员找到所对应的角色,以及每个角色所包含所有的权限组的信息,以及所有的权限的内容
 *    2)可以根据一个权限组找到所有具备此权限的角色以及每个角色所拥有的管理员信息
 *     Role_Group表:实际上属于一张关系表,它保存两张表的外键的关联关系,这种关联关系表不需要为其设计单独的Java类
 *        设计了没有一点作用,生成的只能是实体类的转化表,而多对多的中间表只需要通过类属性的关系配置即可
 * @author pqd
 */
public class ManyTomManyDemo {
public static void main(String[] args) {
//第一步:设置完整关系
//1:准备出若干个对象
Admin a1=new Admin("admin","123");
Admin a2=new Admin("mldn","abc");
Admin a3=new Admin("yoot","xyz");
Role r1=new Role(1,"系统管理员");
Role r2=new Role(2,"信息管理员");
Group g1=new Group(10,"信息管理");
Group g2=new Group(11,"用户管理");
Group g3=new Group(12,"数据管理");
Group g4=new Group(13,"接口管理");
Group g5=new Group(14,"备份管理");
RoleGroup rg1=new RoleGroup(1001,"新闻发布","-");
RoleGroup rg2=new RoleGroup(1002,"新闻列表","-");
RoleGroup rg3=new RoleGroup(1003,"新闻审核","-");
RoleGroup rg4=new RoleGroup(1004,"增加用户","-");
RoleGroup rg5=new RoleGroup(1005,"用户列表","-");
RoleGroup rg6=new RoleGroup(1006,"登录日志","-");
RoleGroup rg7=new RoleGroup(1007,"雇员数据","-");
RoleGroup rg8=new RoleGroup(1008,"部门数据","-");
RoleGroup rg9=new RoleGroup(1009,"公司数据","-");
RoleGroup rg10=new RoleGroup(1010,"服务传输","-");
RoleGroup rg11=new RoleGroup(1011,"短信平台","-");
RoleGroup rg12=new RoleGroup(1012,"全部备份","-");
RoleGroup rg13=new RoleGroup(1013,"全部备份","-");
//第二步:设置对象间的引用关系
//设置管理员与角色的关系
a1.setRole(r1);
a2.setRole(r2);
a3.setRole(r2);
r1.setAdmins(new Admin[]{a1});
r2.setAdmins(new Admin[]{a2,a3});
//设置角色与管理员组的关系
r1.setGroups(new Group[]{g1,g2,g3,g4,g5});
r2.setGroups(new Group[]{g1,g2});
g1.setRoles(new Role[]{r1,r2});
g2.setRoles(new Role[]{r1,r2});
g3.setRoles(new Role[]{r1});
g4.setRoles(new Role[]{r1});
g5.setRoles(new Role[]{r1});
//设置管理员组与权限的关系(通过第三张关系表设置,把一个"多个多"的关系拆分成两个"一对多"的关系
  g1.setRoleGroups(new RoleGroup[]{rg1,rg2,rg3});
  g2.setRoleGroups(new RoleGroup[]{rg4,rg5,rg6});
  g3.setRoleGroups(new RoleGroup[]{rg7,rg8,rg9});
  g4.setRoleGroups(new RoleGroup[]{rg10,rg11});
  g5.setRoleGroups(new RoleGroup[]{rg12,rg13});
  rg1.setGroup(g1);
  rg2.setGroup(g1);
  rg3.setGroup(g1);
  rg4.setGroup(g2);
  rg5.setGroup(g2);
  rg6.setGroup(g2);
  rg7.setGroup(g3);
  rg8.setGroup(g3);
  rg9.setGroup(g3);
  rg10.setGroup(g4);
  rg11.setGroup(g4);
  rg12.setGroup(g5);
  rg13.setGroup(g5);
//第三步:取出数据
  System.out.println("可以根据一个管理员找到所对应的角色");
  System.out.println(a1.getInfo());
  System.out.println(a1.getRole().getInfo());
  System.out.println("\t|-根据每个角色所包含所有的权限组的信息");
  for(int x=0;x<a1.getRole().getGroups().length;x++){
  System.out.println("\t|- "+a1.getRole().getGroups()[x].getInfo());
  for(int y=0;y<a1.getRole().getGroups()[x].getRoleGroups().length;y++){
  System.out.println("\t\t|- "+a1.getRole().getGroups()[x].getRoleGroups()[y].getInfo());
  }
  }
  System.out.println("---------------------------------------");
  System.out.println("可以根据一个权限组找到所有具备此权限的角色以及每个角色所拥有的管理员信息");
  System.out.println(g1);
  System.out.println("根据一个权限组找到所有具备此权限的角色");
  for(int x=0;x<g1.getRoles().length;x++){
  System.out.println("\t|- "+g1.getRoles()[x].getInfo());
  for(int y=0;y<g1.getRoles()[x].getAdmins().length;y++){
  System.out.println("\t\t|- "+g1.getRoles()[x].getAdmins()[y].getInfo());
  }
  }
}
}

原创粉丝点击