上一篇:来自现实世界的邀请:映射转换 | 带你学《Java面向对象编程》之二十三
【本节目标】
通过阅读本节内容,你将跟随作者的步伐一步步实现父子分类、购物记录等简单的一对多、多对多的映射关系,并能够尝试完成其他相似的映射关系需求。
一对多映射
图一 实体表
按照表的要求将表的结构转换为类结构,同时可以获取如下信息:
- 获取一个分类的完整信息;
- 可以根据分类获取其对应的所有子分类的信息。
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 [] getSubitems () {
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.getSubitems().length ; x ++) {
System.out.println(“\t|- ”+ item.getSubitems() [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,”耳机” ,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[] {mem A ,memB}) ;
proB.setMembers(new Member[] {mem A}) ;
proC.setMembers(new Member[] {mem A}) ;
//第二步:根据要求获取数据
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()) ;
}
System.out.println(“------------根据商品找到被浏览的记录--------------”) ;
System.out.println(proA.get Info() ) ;
for(int x = 0; x < proA.getMembers() .length; x ++) {
System.out.println(“\t|-”+proA.getMembers() [x].getInfo() ) ;
}
}
}
图四 用户-商品结果图
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学