開發與維運

千字为你打开映射的大门 | 带你学《Java面向对象编程》之二十四

上一篇:来自现实世界的邀请:映射转换 | 带你学《Java面向对象编程》之二十三
【本节目标】
通过阅读本节内容,你将跟随作者的步伐一步步实现父子分类、购物记录等简单的一对多、多对多的映射关系,并能够尝试完成其他相似的映射关系需求。

一对多映射

image.png
图一 实体表

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

  • 获取一个分类的完整信息;
  • 可以根据分类获取其对应的所有子分类的信息。
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()) ;
       }
    }
}

image.png
图二 执行结果

多对多映射

image.png
图三 用户-商品实体类

将以上的结构转换为类结构,并且可以获取如下的信息:

  • 获取一个用户访问的所有商品的信息;
  • 获取一个商品被浏览过的全部的用户信息。

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

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() ) ; 
       }
   }
}

image.png
图四 用户-商品结果图

想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

更多Java面向对象编程文章查看此处

Leave a Reply

Your email address will not be published. Required fields are marked *