广告表 字段名称 数据类型 是否主键 是否可空 描述 id int 是 否 广告ID name varchar(50) 否 否 广告名称 position_id int 否 否 广告位置ID media_id int 否 否 媒体文件ID start_time datetime 否 否 广告开始时间 end_time datetime 否 否 广告结束时间 link varchar(100) 否 否 广告链接 status tinyint 否 否 广告状态:0-未开始,1-正在展示,2-已结束 广告位置表 字段名称 数据类型 是否主键 是否可空 描述 id int 是 否 广告位置ID name varchar(50) 否 否 广告位置名称 width int 否 否 广告位置宽度 height int 否 否 广告位置高度 媒体文件表 字段名称 数据类型 是否主键 是否可空 描述 id int 是 否 媒体文件ID name varchar(50) 否 否 媒体文件名称 type tinyint 否 否 媒体文件类型:0-图片,1-视频 url varchar(100) 否 否 媒体文件URL地址 width int 否 否 媒体文件宽度 height int 否 否 媒体文件高度 duration int 否 否 媒体文件时长(仅对视频有效)请用这个数据库,实现一个对于广告功能的增删查改的springboot项目,并且请在广告的新增功能中对于图片或者视频的存储逻辑用java代码详细展示出来
时间: 2023-12-17 17:02:32 浏览: 125
世界国家表+世界省份表+世界城市表_关联id_my数据表
好的,下面是我实现的广告管理系统的数据库设计和Java代码示例。
首先,我们需要创建三张表:广告表、广告位置表和媒体文件表。可以使用如下的SQL语句创建这三张表:
```sql
-- 广告表
CREATE TABLE ad (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
position_id INT NOT NULL,
media_id INT NOT NULL,
start_time DATETIME NOT NULL,
end_time DATETIME NOT NULL,
link VARCHAR(100) NOT NULL,
status TINYINT NOT NULL
);
-- 广告位置表
CREATE TABLE ad_position (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
width INT NOT NULL,
height INT NOT NULL
);
-- 媒体文件表
CREATE TABLE media (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
type TINYINT NOT NULL,
url VARCHAR(100) NOT NULL,
width INT NOT NULL,
height INT NOT NULL,
duration INT
);
```
接下来,我们可以使用Spring Boot框架和MyBatis ORM框架来创建一个基于RESTful API的广告管理系统。具体的代码实现如下:
Ad.java:
```java
public class Ad {
private int id;
private String name;
private int positionId;
private int mediaId;
private LocalDateTime startTime;
private LocalDateTime endTime;
private String link;
private int status;
// getters and setters
}
```
AdPosition.java:
```java
public class AdPosition {
private int id;
private String name;
private int width;
private int height;
// getters and setters
}
```
Media.java:
```java
public class Media {
private int id;
private String name;
private int type;
private String url;
private int width;
private int height;
private Integer duration;
// getters and setters
}
```
AdMapper.java:
```java
@Mapper
public interface AdMapper {
Ad getAdById(int id);
List<Ad> getAllAds();
void addAd(Ad ad);
void updateAd(Ad ad);
void deleteAd(int id);
}
```
AdPositionMapper.java:
```java
@Mapper
public interface AdPositionMapper {
AdPosition getAdPositionById(int id);
List<AdPosition> getAllAdPositions();
void addAdPosition(AdPosition adPosition);
void updateAdPosition(AdPosition adPosition);
void deleteAdPosition(int id);
}
```
MediaMapper.java:
```java
@Mapper
public interface MediaMapper {
Media getMediaById(int id);
List<Media> getAllMedia();
void addMedia(Media media);
void updateMedia(Media media);
void deleteMedia(int id);
}
```
AdController.java:
```java
@RestController
@RequestMapping("/api/ad")
public class AdController {
@Autowired
private AdMapper adMapper;
@GetMapping("/{id}")
public Ad getAdById(@PathVariable int id) {
return adMapper.getAdById(id);
}
@GetMapping
public List<Ad> getAllAds() {
return adMapper.getAllAds();
}
@PostMapping
public void addAd(@RequestBody Ad ad) {
adMapper.addAd(ad);
}
@PutMapping("/{id}")
public void updateAd(@PathVariable int id, @RequestBody Ad ad) {
ad.setId(id);
adMapper.updateAd(ad);
}
@DeleteMapping("/{id}")
public void deleteAd(@PathVariable int id) {
adMapper.deleteAd(id);
}
}
```
AdPositionController.java:
```java
@RestController
@RequestMapping("/api/ad-position")
public class AdPositionController {
@Autowired
private AdPositionMapper adPositionMapper;
@GetMapping("/{id}")
public AdPosition getAdPositionById(@PathVariable int id) {
return adPositionMapper.getAdPositionById(id);
}
@GetMapping
public List<AdPosition> getAllAdPositions() {
return adPositionMapper.getAllAdPositions();
}
@PostMapping
public void addAdPosition(@RequestBody AdPosition adPosition) {
adPositionMapper.addAdPosition(adPosition);
}
@PutMapping("/{id}")
public void updateAdPosition(@PathVariable int id, @RequestBody AdPosition adPosition) {
adPosition.setId(id);
adPositionMapper.updateAdPosition(adPosition);
}
@DeleteMapping("/{id}")
public void deleteAdPosition(@PathVariable int id) {
adPositionMapper.deleteAdPosition(id);
}
}
```
MediaController.java:
```java
@RestController
@RequestMapping("/api/media")
public class MediaController {
@Autowired
private MediaMapper mediaMapper;
@GetMapping("/{id}")
public Media getMediaById(@PathVariable int id) {
return mediaMapper.getMediaById(id);
}
@GetMapping
public List<Media> getAllMedia() {
return mediaMapper.getAllMedia();
}
@PostMapping
public void addMedia(@RequestBody Media media) {
mediaMapper.addMedia(media);
}
@PutMapping("/{id}")
public void updateMedia(@PathVariable int id, @RequestBody Media media) {
media.setId(id);
mediaMapper.updateMedia(media);
}
@DeleteMapping("/{id}")
public void deleteMedia(@PathVariable int id) {
mediaMapper.deleteMedia(id);
}
}
```
最后,我们需要在广告新增功能中对于图片或者视频的存储逻辑用Java代码详细展示出来。可以使用如下的Java代码实现:
```java
@PostMapping
public void addAd(@RequestParam("name") String name,
@RequestParam("positionId") int positionId,
@RequestParam("mediaFile") MultipartFile mediaFile,
@RequestParam("startTime") LocalDateTime startTime,
@RequestParam("endTime") LocalDateTime endTime,
@RequestParam("link") String link,
@RequestParam("status") int status) throws IOException {
// 存储媒体文件
String mediaFileName = mediaFile.getOriginalFilename();
byte[] mediaFileContent = mediaFile.getBytes();
MediaType mediaType = MediaType.parseMediaType(mediaFile.getContentType());
int mediaTypeCode = mediaType.getType() == "image" ? 0 : 1; // 0-图片,1-视频
Media media = new Media();
media.setName(mediaFileName);
media.setType(mediaTypeCode);
media.setUrl("http://localhost:8080/api/media/" + mediaFileName);
media.setWidth(0); // TODO: 获取宽度
media.setHeight(0); // TODO: 获取高度
media.setDuration(mediaTypeCode == 1 ? 0 : null); // TODO: 获取时长
mediaMapper.addMedia(media);
File mediaFileObj = new File("media/" + mediaFileName);
FileUtils.writeByteArrayToFile(mediaFileObj, mediaFileContent);
// 存储广告
Ad ad = new Ad();
ad.setName(name);
ad.setPositionId(positionId);
ad.setMediaId(media.getId());
ad.setStartTime(startTime);
ad.setEndTime(endTime);
ad.setLink(link);
ad.setStatus(status);
adMapper.addAd(ad);
}
```
这样,我们就成功地实现了一个基于Spring Boot和MyBatis的广告管理系统,并且在新增广告时也展示了对于图片或者视频的存储逻辑。
阅读全文