spring boot项目实战——多对多表结构

一、背景

本文章属于系列文章,背景请前往系列入口文章
本篇介绍spring boot项目中,上篇说明了一对多的查询,本篇讲述如何做多对多的两个表的数据结构的查询
具体请看github项目的third分支

二、上手

2.1 说明

SQL文件(接上篇):


DROP TABLE IF EXISTS `cart`;
CREATE TABLE `cart` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
    `name` varchar(255) DEFAULT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `cart_item`;
CREATE TABLE `cart_item` (
    `cart_id` int(11) unsigned NOT NULL,
    `item_id` int(11) unsigned NOT NULL,
    PRIMARY KEY (`item_id`, `cart_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

insert into cart_item (cart_id, item_id) values (1, 3);
insert into cart_item (cart_id, item_id) values (1, 4);

新增了cartcart_item表,cart和item表是多对多的关系。
cart_item存储cart和item的id对应关系。

2.2 新增CartController

@RestController
public class CartController {
    @Autowired
    private CartRepository cartRepository;
    @GetMapping("/cart/{id}")
    public CartEntity findById(@PathVariable Integer id) {
        return cartRepository.findById(id).get();
    }
}

同时新增CartEntity:

@Entity
@Data
@Table(name = "cart")
public class CartEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String name;

    @ManyToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
    @JoinTable(name = "cart_item", joinColumns = {
            @JoinColumn(name = "cart_id", referencedColumnName = "id")}, inverseJoinColumns = {
            @JoinColumn(name = "item_id", referencedColumnName = "id")})
    private List items;
}

我们利用表cart_item关联了cart表和item表,测试成功:

image.png

(完)

你可能感兴趣的:(spring boot项目实战——多对多表结构)