关联关系简介

关联关系(Association),是一种拥有的关系,它使一个对象知道另一个对象的属性和方法。关联可以是双向的,也可以是单向的。在Java语言中,关联关系一般使用成员变量来实现。
image.png
对象的关联关系解决了什么问题
在多表查询时,使用对象关联关系能够更合理的存放查询到的结果集数据。
关联关系的方向性

  • 单向只在一侧关联了对方。
  • 双向两侧相互关联了对方。

实现对象关联关系

  1. CREATE TABLE `orders` (
  2. `orderid` int(11) NOT NULL AUTO_INCREMENT,
  3. `orderprice` float(11,2) DEFAULT NULL,
  4. `user_id` int(11) DEFAULT NULL,
  5. PRIMARY KEY (`orderid`),
  6. KEY `orders_fk` (`user_id`),
  7. CONSTRAINT `orders_fk` FOREIGN KEY (`user_id`) REFERENCES `users` (`userid`)
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `items` (
  `itemid` int(11) NOT NULL,
  `itemname` varchar(30) DEFAULT NULL,
  `itemprice` float(11,2) DEFAULT NULL,
  `itemnum` int(11) DEFAULT NULL,
  PRIMARY KEY (`itemid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `orders_items` (
  `order_id` int(11) NOT NULL,
  `item_id` int(11) NOT NULL,
  PRIMARY KEY (`order_id`,`item_id`),
  KEY `orders_items_fk2` (`item_id`),
  CONSTRAINT `orders_items_fk` FOREIGN KEY (`order_id`) REFERENCES `orders` (`orderid`),
  CONSTRAINT `orders_items_fk2` FOREIGN KEY (`item_id`) REFERENCES `items` (`itemid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
public class Users {
    private int userid;
    private String username;
    private int userage;
    //创建与Orders的关联关系
    private List<Orders> orders = new ArrayList<>();

    public List<Orders> getOrders() {
        return orders;
    }

    public void setOrders(List<Orders> orders) {
        this.orders = orders;
    }

    public int getUserid() {
        return userid;
    }

    public void setUserid(int userid) {
        this.userid = userid;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public int getUserage() {
        return userage;
    }

    public void setUserage(int userage) {
        this.userage = userage;
    }

    @Override
    public String toString() {
        return "Users{" +
                "userid=" + userid +
                ", username='" + username + '\'' +
                ", userage=" + userage +
                '}';
    }
}
import java.util.ArrayList;
import java.util.List;

public class Orders {
    private int orderid;
    private double orderprice;
    //关联Users
    private Users users;
    //关联Items
    private List<Items> items = new ArrayList<>();

    public int getOrderid() {
        return orderid;
    }

    public void setOrderid(int orderid) {
        this.orderid = orderid;
    }

    public double getOrderprice() {
        return orderprice;
    }

    public void setOrderprice(double orderprice) {
        this.orderprice = orderprice;
    }

    public Users getUsers() {
        return users;
    }

    public void setUsers(Users users) {
        this.users = users;
    }

    public List<Items> getItems() {
        return items;
    }

    public void setItems(List<Items> items) {
        this.items = items;
    }
}
import java.util.ArrayList;
import java.util.List;

public class Items {
    private int itemid;
    private String itemname;
    private double itemprice;
    private int itemnum;
    //关联Orders
    private List<Orders> orders = new ArrayList<>();

    public int getItemid() {
        return itemid;
    }

    public void setItemid(int itemid) {
        this.itemid = itemid;
    }

    public String getItemname() {
        return itemname;
    }

    public void setItemname(String itemname) {
        this.itemname = itemname;
    }

    public double getItemprice() {
        return itemprice;
    }

    public void setItemprice(double itemprice) {
        this.itemprice = itemprice;
    }

    public int getItemnum() {
        return itemnum;
    }

    public void setItemnum(int itemnum) {
        this.itemnum = itemnum;
    }

    public List<Orders> getOrders() {
        return orders;
    }

    public void setOrders(List<Orders> orders) {
        this.orders = orders;
    }
}