网站建站咨询/怎么弄一个网站平台
说明:学习本内容需要对简单Java类及其熟悉,如果不熟悉简单Java类,可学习以下地址内容:https://blog.csdn.net/weixin_45176509/article/details/102686050
基本概念(综合应用)
根据数据表的结构实现简单Java类。数据库之中提供数据表,实体数据表描述实体概念。程序类的定义与实体表定义差距不大。数据表与简单Java设计关系如下:
1·数据实体表设计=类的定义;
2·表中的字段=类的成员属性;
3·表的外键关联=引用关联;
4·表的一行记录=类的一个实例化对象;
5·表的多行记录=对象数组;
在以后实际项目开发过程中一定是分两步实现;
第一步·根据表的结构关系进行对象配置;
第二步·根据要求通过结构获取数据;
例子:假如现在有一个员工信息表和一个部门信息表。一个员工只属于一个部门,一个部门拥有多个员工,一个员工只有一个领导,领导也是员工。
通过员工,可以获得该员工领导信息和该员工所属部门信息;
通过部门,可以获得该部门所拥有全部员工信息;
代码实现:
//部门类
class Dep{
private long dno; //定义属性
private String name;
private String place;
private Emp emp[]; //一个部门有多个员工
public Dep(){} //无参构造方法
public Dep(long dno,String name,String place){ //有参构造方法this.dno=dno;this.name=name;this.place=place;}
public void setEmp(Emp []emp){ //set方法this.emp=emp;}public Emp [] getEmp(){ //get方法return this.emp;}
public String getInfo1(){ //获得全部信息方法return +this.dno+"、"+this.name+"、"+this.place;}
}
//员工类
class Emp{
private long eno;
private String name;
private Dep dep; //一个员工属于一个部门
private Emp leader;public Emp(){}public Emp(long eno,String name) {this.eno=eno;this.name=name;
}
public void setDep(Dep dep) {this.dep=dep;
}
public Dep getDep() {return this.dep;
}
public void setLeader(Emp leader) {this.leader=leader;
}
public Emp getLeader() {return this.leader;
}
public String getInfo2() {return this.eno+"、"+this.name;
}
}
//主类public class yingshe{
public static void main(String args[]){Dep dep1 =new Dep(1234,"七宝琉璃宗","天斗帝国");Dep dep2 =new Dep(1354,"昊天宗","星罗帝国");Emp a=new Emp(1111,"唐三");Emp b=new Emp(2222,"戴姆拜");Emp c=new Emp(2222,"仍盈盈");Emp leader1 =new Emp(1,"大师");Emp leader2 =new Emp(2,"柳二龙");
//设置关系:一个员工只属于一个部门a.setDep(dep1);b.setDep(dep2);c.setDep(dep1);
//设置关系:一个部门拥有多个员工dep1.setEmp(new Emp[] {a,c});dep2.setEmp(new Emp[] {b});
//设置关系:一个员工只有一个领导a.setLeader(leader1);b.setLeader(leader2);
//输出System.out.println("部门dep1信息:"+dep1.getInfo1());//部门dep1信息for(int x=0;x<dep1.getEmp().length;x++) {System.out.println("该部门第"+(x+1)+"号员工:"+dep1.getEmp()[x].getInfo2()); //通过部门获得员工信息if(dep1.getEmp()[x].getLeader()!=null) {System.out.println((x+1)+"号员工领导:"+dep1.getEmp()[x].getLeader().getInfo2()); //通过部门间接获取员工领导信息}else{System.out.println((x+1)+"号员工无领导");}
}
System.out.println();
System.out.println("部门dep2信息:"+dep2.getInfo1());//部门dep2信息
for(int y=0;y<dep2.getEmp().length;y++) {System.out.println("该部门第"+(y+1)+"号员工:"+dep2.getEmp()[y].getInfo2());//通过部门获得员工信息if(dep1.getEmp()[y].getLeader()!=null) {System.out.println((y+1)+"号员工领导:"+dep2.getEmp()[y].getLeader().getInfo2());//通过部门间接获得员工领导信息}else{System.out.println((y+1)+"号员工无领导");}
}System.out.println();System.out.println("员工a的领导:"+a.getLeader().getInfo2());//通过员工直接获得领导信息System.out.println("员工a的部门:"+a.getDep().getInfo1());//通过员工获得部门信息}
}
输出结果:
部门dep1信息:1234、七宝琉璃宗、天斗帝国
该部门第1号员工:1111、唐三
1号员工领导:1、大师
该部门第2号员工:2222、仍盈盈
2号员工无领导
部门dep2信息:1354、昊天宗、星罗帝国
该部门第1号员工:2222、戴姆拜
1号员工领导:2、柳二龙
员工a的领导:1、大师
员工a的部门:1234、七宝琉璃宗、天斗帝国
一对多映射
将上述例题分解,其中部门与职员之间存在一对多关系,即一个部门有多名员工。
通过部门可以获得该部门所有员工的信息;
//部门类
class Dep{
private long dno;
private String name;
private String place;
private Emp emp[]; //一个部门有多个员工
public Dep(){}
public Dep(long dno,String name,String place){this.dno=dno;this.name=name;this.place=place;}
public void setEmp(Emp []emp){this.emp=emp;}
public Emp [] getEmp(){return this.emp;}
public String getInfo1(){return +this.dno+"、"+this.name+"、"+this.place;}
}
//员工类
class Emp{
private long eno;
private String name;
public Emp(){}
public Emp(long eno,String name) {this.eno=eno;this.name=name;
}
public String getInfo2() {return this.eno+"、"+this.name;
}
}
//主类public class yingshe{
public static void main(String args[]){Dep dep1 =new Dep(1234,"七宝琉璃宗","天斗帝国");Emp a []=new Emp [] {new Emp(1111,"唐三"),new Emp(2222,"戴姆拜"),new Emp(2222,"仍盈盈")};//设置关系:一个部门拥有多个员工dep1.setEmp(a);//输出System.out.println("部门dep1信息:"+dep1.getInfo1());//部门dep1信息for(int x=0;x<dep1.getEmp().length;x++) {System.out.println("该部门第"+(x+1)+"号员工:"+dep1.getEmp()[x].getInfo2()); //通过部门获得员工信息}}}
输出结果:
部门dep1信息:1234、七宝琉璃宗、天斗帝国
该部门第1号员工:1111、唐三
该部门第2号员工:2222、戴姆拜
该部门第3号员工:2222、仍盈盈
多对多映射
顾客去超市购物,一个顾客浏览多个商品,一个商品被多个顾客浏览,顾客和商品之间存在多对多的关系。
通过商品,可以显示其所有浏览过该商品的顾客信息;
通过顾客,可以打印该顾客浏览过的所有商品信息;
class User{private long uid;private String name;private Product product [];public User(){}public User(long uid,String name){this.uid=uid;this.name=name;}
//getter,setter略
public void setProduct(Product [] product){this.product=product;}
public Product [] getProduct(){return this.product;}
public String getInfo(){return "用户id:"+this.uid+"、用户名:"+this.name;}
}
class Product{private long pid;private String name;private double price;private User user [];//定义顾客属性public Product(){}
public Product(long pid,String name,double price){this.pid=pid;this.name=name;this.price=price;}
//getter,setter略
public void setUser(User [] user){this.user=user;}
public User [] getUser(){return this.user;}
public String getInfo(){return "商品id:"+this.pid+"、商品名称:"+this.name+"、商品价格:"+this.price;}
}
public class yingshe{public static void main (String args[]){//1、设置对象及关系User m=new User(123,"盖聂");User n=new User(456,"卫庄");Product a=new Product(01,"毛巾",10.5);Product b=new Product(02,"脸盆",20.0);Product c=new Product(03,"牙刷",12.0);m.setProduct(new Product [] {a,b,c});n.setProduct(new Product [] {a});a.setUser(new User [] {m,n});b.setUser(new User [] {m});c.setUser(new User [] {n});//2、获取数据System.out.println("**********根据浏览记录显示顾客信息");for(int x=0;x<a.getUser().length;x++){System.out.println("a商品浏览顾客:"+a.getUser()[x].getInfo());}for(int x=0;x<b.getUser().length;x++){System.out.println("b商品浏览顾客:"+a.getUser()[x].getInfo());}for(int x=0;x<c.getUser().length;x++){System.out.println("c商品浏览顾客:"+c.getUser()[x].getInfo());}System.out.println("**********根据顾客信息显示浏览记录");for(int x=0;x<m.getProduct().length;x++){System.out.println("m顾客浏览记录:"+m.getProduct()[x].getInfo());}for(int y=0;y<=n.getProduct().length-1;y++){System.out.println("n顾客浏览记录:"+n.getProduct()[y].getInfo());}
}
}
输出结果:
**********根据浏览记录显示顾客信息
a商品浏览顾客:用户id:123、用户名:盖聂
a商品浏览顾客:用户id:456、用户名:卫庄
b商品浏览顾客:用户id:123、用户名:盖聂
c商品浏览顾客:用户id:456、用户名:卫庄
**********根据顾客信息显示浏览记录
m顾客浏览记录:商品id:1、商品名称:毛巾、商品价格:10.5
m顾客浏览记录:商品id:2、商品名称:脸盆、商品价格:20.0
m顾客浏览记录:商品id:3、商品名称:牙刷、商品价格:12.0
n顾客浏览记录:商品id:1、商品名称:毛巾、商品价格:10.5
复杂多对多映射
在进行实际项目国产中,对于用户的授权管理是一项重要的任务,下面为一个常见用户权限管理的表结构设计,基本关系如下:
·一个用户可以拥有多个角色,一个角色可能有多个用户;
·一个角色可以拥有多个权限;
要求实现如下功能:
·根据一个用户找到该用户所对应的所有角色,以及每一个角色所对应的权限信息;
·根据一个角色找到该角色下的所有权限,以及拥有此角色的全部用户信息;
·根据一个权限找到具备此权限的所有用户。
//用户类
class User{
private long uid;
private String uname;
private Role roles[]; //角色
public User(){}
public User(long uid,String uname){ //有参构造
this.uid=uid;
this.uname=uname;
}
//setter,getter略
public void setRoles(Role roles[]){this.roles=roles;}
public Role [] getRoles(){return this.roles;}
public String getInfo(){ //用于输出用户信息return "用户id:"+this.uid+"、用户名:"+this.uname;}
}
//角色类
class Role{
private long rid;
private String rname;
private User users[]; //用户
private Pri pris[]; //权限
public Role(){}
public Role(long rid,String rname){
this.rid=rid;
this.rname=rname;
}//setter,getter略
public void setUsers(User users []){this.users=users;
}
public User [] getUsers(){return this.users;}
public void setPris(Pri [] pris){this.pris=pris;}
public Pri [] getPris(){return this.pris;}
public String getInfo(){return "角色id:"+this.rid+"、角色名:"+this.rname;}
}
//权限类
class Pri{
private long pid;
private String pname;
private Role roless ; //角色
public Pri(){}
public Pri(long pid,String pname){
this.pid=pid;
this.pname=pname;
}
//setter,getter略
public void setRoless(Role roless){this.roless=roless;}
public Role getRoless(){return this.roless;}
public String getInfo(){return "权限id:"+this.pid+"、权限名:"+this.pname;}
}
public class Company{
public static void main (String args[]){//1、声明对象实例化,设置权限User a=new User(1,"温宁");//2个用户User b=new User(2,"江城");Role x=new Role(101,"岐山");//3个角色Role y=new Role(202,"云梦");Role z=new Role(303,"兰陵");Pri m=new Pri(11,"检察寮");//5个权限Pri n=new Pri(22,"炼药房");Pri p=new Pri(33,"兵器谱");Pri q=new Pri(44,"演武场");Pri c=new Pri(55,"太学厅");//角色与权限关系:一个角色拥有多个权限x.setPris(new Pri [] {m,n});y.setPris(new Pri [] {p,q});z.setPris(new Pri [] {c});//权限与角色关系:一个权限可以被多个角色拥有m.setRoless(x);n.setRoless(x);p.setRoless(y);q.setRoless(y);c.setRoless(z);//用户与角色关系:一个用户拥有多个角色a.setRoles(new Role [] {x,y});b.setRoles(new Role [] {x,z});//角色与用户关系:一个角色有多个用户扮演x.setUsers(new User [] {a,b});y.setUsers(new User [] {a});z.setUsers(new User [] {b});//2、获取数据System.out.println("通过用户查找信息******************");System.out.println("用户【a】全部信息:"+a.getInfo());for(int d=0; d<a.getRoles().length;d++){System.out.println("用户【a】扮演【"+(d+1)+"】号角色信息:"+a.getRoles()[d].getInfo());for (int e=0; e<a.getRoles()[d].getPris().length; e++){System.out.println("用户【a】的【"+(d+1)+"】号角色的第【"+(e+1)+"】个权限信息:"+a.getRoles()[d].getPris()[e].getInfo());}}System.out.println("通过角色查找信息******************");System.out.println("角色【x】全部信息:"+x.getInfo());for(int f=0;f<x.getPris().length;f++){System.out.println("角色【x】的【"+(f+1)+"】号权限信息:"+x.getPris()[f].getInfo());}for (int g=0;g<x.getUsers().length ; g++){System.out.println("角色【x】的第【"+(g+1)+"】用户信息:"+x.getUsers()[g].getInfo());}System.out.println("通过权限查找信息*******************");System.out.println("权限【m】全部信息:"+m.getInfo());System.out.println("权限【m】角色信息:"+m.getRoless().getInfo());for (int h=0;h<m.getRoless().getUsers().length ;h++ ){System.out.println("权限【m】所对应的角色对应的第【"+(h+1)+"】个用户信息为;"+m.getRoless().getUsers()[h].getInfo());}
}
}
输出结果:
通过用户查找信息******************
用户【a】全部信息:用户id:1、用户名:温宁
用户【a】扮演【1】号角色信息:角色id:101、角色名:岐山
用户【a】的【1】号角色的第【1】个权限信息:权限id:11、权限名:检察寮
用户【a】的【1】号角色的第【2】个权限信息:权限id:22、权限名:炼药房
用户【a】扮演【2】号角色信息:角色id:202、角色名:云梦
用户【a】的【2】号角色的第【1】个权限信息:权限id:33、权限名:兵器谱
用户【a】的【2】号角色的第【2】个权限信息:权限id:44、权限名:演武场
通过角色查找信息******************
角色【x】全部信息:角色id:101、角色名:岐山
角色【x】的【1】号权限信息:权限id:11、权限名:检察寮
角色【x】的【2】号权限信息:权限id:22、权限名:炼药房
角色【x】的第【1】用户信息:用户id:1、用户名:温宁
角色【x】的第【2】用户信息:用户id:2、用户名:江城
通过权限查找信息*******************
权限【m】全部信息:权限id:11、权限名:检察寮
权限【m】角色信息:角色id:101、角色名:岐山
权限【m】所对应的角色对应的第【1】个用户信息为;用户id:1、用户名:温宁
权限【m】所对应的角色对应的第【2】个用户信息为;用户id:2、用户名:江城