美文网首页
spring boot项目实战——多对多表结构

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

作者: _茂 | 来源:发表于2020-10-09 14:03 被阅读0次

    一、背景

    本文章属于系列文章,背景请前往系列入口文章
    本篇介绍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

    (完)

    相关文章

      网友评论

          本文标题:spring boot项目实战——多对多表结构

          本文链接:https://www.haomeiwen.com/subject/fnifyktx.html