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<ItemEntity> items;
}

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

image.png

(完)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。