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

简介: 本节通过两个案例由浅入深地为读者展现了两个简单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面向对象编程》之二十五
更多Java面向对象编程文章查看此处

相关文章
|
1月前
|
算法 Java 程序员
在Java的编程世界里,多态不仅仅是一种代码层面的技术,它是思想的碰撞,是程序员对现实世界复杂性的抽象映射,是对软件设计哲学的深刻领悟。
在Java的编程世界里,多态不仅仅是一种代码层面的技术,它是思想的碰撞,是程序员对现实世界复杂性的抽象映射,是对软件设计哲学的深刻领悟。
55 9
|
1月前
|
Java 开发者
在Java面向对象编程的广阔海洋中,多态犹如一股深邃的潜流,它推动着代码从单一走向多元,从僵化迈向灵活。
在Java面向对象编程的广阔海洋中,多态犹如一股深邃的潜流,它推动着代码从单一走向多元,从僵化迈向灵活。
35 7
|
1月前
|
Java 开发者
那些年,我们一同踏入Java编程的大门,多态,这个充满魔法的名字,曾无数次点亮我们探索面向对象编程的热情。
那些年,我们一同踏入Java编程的大门,多态,这个充满魔法的名字,曾无数次点亮我们探索面向对象编程的热情。
41 5
|
1月前
|
Java 程序员
Java中的继承和多态:理解面向对象编程的核心概念
【8月更文挑战第22天】在Java的世界中,继承和多态不仅仅是编程技巧,它们是构建可维护、可扩展软件架构的基石。通过本文,我们将深入探讨这两个概念,并揭示它们如何共同作用于面向对象编程(OOP)的实践之中。你将了解继承如何简化代码重用,以及多态如何为程序提供灵活性和扩展性。让我们启程,探索Java语言中这些强大特性的秘密。
|
1月前
|
存储 前端开发 JavaScript
【前端学java】面向对象编程基础-类的使用(4)
【8月更文挑战第9天】面向对象编程基础-类的使用
13 0
【前端学java】面向对象编程基础-类的使用(4)
|
1月前
|
Java
Java——编码GBK的不可映射字符
Java——编码GBK的不可映射字符
31 1
|
1月前
|
Java 程序员 开发者
Java的面向对象编程:从基础到深入
【8月更文挑战第21天】在本文中,我们将探讨Java的面向对象编程(OOP)的核心概念,包括类、对象、继承、多态和封装。我们将通过实例和比喻,以通俗易懂的方式,深入理解这些概念的内涵和意义,以及它们如何影响我们的编程思维和实践。无论你是初学者还是有经验的开发者,这篇文章都将帮助你更深入地理解Java的OOP,并启发你思考如何在你的项目中应用这些概念。
|
2月前
|
Java API 项目管理
Java中的函数式编程与传统面向对象编程对比
Java中的函数式编程与传统面向对象编程对比
|
2月前
|
Java 开发者
Java中的面向对象编程思想
Java中的面向对象编程思想
|
3月前
|
XML Java 数据格式
“MapStruct妙用指南:解锁Java对象映射的强大力量!“ ️
“MapStruct妙用指南:解锁Java对象映射的强大力量!“ ️
116 0