spring boot项目实战——多对多表结构
2020-10-09 本文已影响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);
新增了cart
和cart_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
表,测试成功:
(完)