广告功能,广告信息包括广告名称,广告位置,开始日期,结束日期,广告链接,广告图片,请设计一个springboot项目,关联广告表,广告位置表,广告图片表,并详细展示增删查改广告信息的java代码
时间: 2023-07-16 13:14:48 浏览: 98
好的,我来为您介绍如何设计这样一个Spring Boot项目。
首先,我们需要在数据库中创建三张表:广告表、广告位置表、广告图片表。这三张表之间的关系如下:
- 广告表和广告位置表是一对多的关系,一个广告位置可以拥有多个广告。
- 广告表和广告图片表是一对一的关系,一个广告只能对应一个广告图片。
下面是三张表的建表语句:
```sql
-- 广告表
CREATE TABLE `ad` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL COMMENT '广告名称',
`position_id` int(11) NOT NULL COMMENT '广告位置ID',
`start_date` datetime NOT NULL COMMENT '开始日期',
`end_date` datetime NOT NULL COMMENT '结束日期',
`link` varchar(100) NOT NULL COMMENT '广告链接',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='广告表';
-- 广告位置表
CREATE TABLE `ad_position` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL COMMENT '广告位置名称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='广告位置表';
-- 广告图片表
CREATE TABLE `ad_image` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`url` varchar(200) NOT NULL COMMENT '广告图片URL',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='广告图片表';
```
接下来,我们需要定义三个实体类来对应三张表:
```java
// 广告实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "ad")
public class Ad {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
@ManyToOne
@JoinColumn(name = "position_id")
private AdPosition position;
@Column(name = "start_date")
private LocalDateTime startDate;
@Column(name = "end_date")
private LocalDateTime endDate;
private String link;
}
// 广告位置实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "ad_position")
public class AdPosition {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
@OneToMany(mappedBy = "position")
private List<Ad> ads;
}
// 广告图片实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "ad_image")
public class AdImage {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String url;
@OneToOne(mappedBy = "image")
private Ad ad;
}
```
接下来,我们需要定义三个Repository接口来操作这三张表:
```java
// 广告Repository接口
@Repository
public interface AdRepository extends JpaRepository<Ad, Integer> {
}
// 广告位置Repository接口
@Repository
public interface AdPositionRepository extends JpaRepository<AdPosition, Integer> {
}
// 广告图片Repository接口
@Repository
public interface AdImageRepository extends JpaRepository<AdImage, Integer> {
}
```
最后,我们需要定义一个Controller来处理增删查改操作:
```java
@RestController
@RequestMapping("/ads")
public class AdController {
@Autowired
private AdRepository adRepository;
@Autowired
private AdPositionRepository adPositionRepository;
@Autowired
private AdImageRepository adImageRepository;
// 查询所有广告
@GetMapping
public List<Ad> findAll() {
return adRepository.findAll();
}
// 新增广告
@PostMapping
public Ad add(@RequestBody AdDto adDto) {
AdPosition position = adPositionRepository.getOne(adDto.getPositionId());
AdImage image = new AdImage();
image.setUrl(adDto.getImageUrl());
adImageRepository.save(image);
Ad ad = new Ad();
ad.setName(adDto.getName());
ad.setPosition(position);
ad.setStartDate(adDto.getStartDate());
ad.setEndDate(adDto.getEndDate());
ad.setLink(adDto.getLink());
ad.setImage(image);
return adRepository.save(ad);
}
// 修改广告
@PutMapping("/{id}")
public Ad modify(@PathVariable Integer id, @RequestBody AdDto adDto) {
Ad ad = adRepository.getOne(id);
AdPosition position = adPositionRepository.getOne(adDto.getPositionId());
AdImage image = ad.getImage();
if (adDto.getImageUrl() != null) {
image.setUrl(adDto.getImageUrl());
adImageRepository.save(image);
}
ad.setName(adDto.getName());
ad.setPosition(position);
ad.setStartDate(adDto.getStartDate());
ad.setEndDate(adDto.getEndDate());
ad.setLink(adDto.getLink());
return adRepository.save(ad);
}
// 删除广告
@DeleteMapping("/{id}")
public void delete(@PathVariable Integer id) {
adRepository.deleteById(id);
}
// 广告Dto
@Data
static class AdDto {
private String name;
private Integer positionId;
private LocalDateTime startDate;
private LocalDateTime endDate;
private String link;
private String imageUrl;
}
}
```
这样,我们就完成了一个关联广告表、广告位置表、广告图片表的Spring Boot项目,可用于增删查改广告信息。
阅读全文