批量生成foreach练习

4 阅读3分钟
# 视频管理模块开发与使用指南

## 1. 数据库表结构设计

### 1.1 创建视频表
```sql
CREATE TABLE `video` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `title` varchar(524) DEFAULT NULL COMMENT '视频标题',
  `summary` varchar(1026) DEFAULT NULL COMMENT '视频概述',
  `cover_img` varchar(524) DEFAULT NULL COMMENT '封面图片URL',
  `price` int(11) DEFAULT NULL COMMENT '视频价格(单位:分)',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `point` double(11,2) DEFAULT '8.70' COMMENT '视频评分(默认8.7,最高10分)',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
```

### 1.2 表结构说明
| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | int(11) unsigned | 主键,自增 |
| title | varchar(524) | 视频标题,最大524字符 |
| summary | varchar(1026) | 视频概述,最大1026字符 |
| cover_img | varchar(524) | 封面图片URL |
| price | int(11) | 视频价格,单位为分 |
| create_time | datetime | 创建时间 |
| point | double(11,2) | 视频评分,范围0-10,保留2位小数 |

## 2. 实体类设计

### 2.1 Video实体类
位于 `src/main/java/net/xdclass/online_xdclass/model/entity/Video.java`

```js
public class Video {


    private Integer id;

    private String title;


    private String summary;


    private String coverImg;

    private Integer  price;


    private Date createTime;


    private Double point;


    private List<Chapter> chapterList;
```


该类定义了视频的核心属性,与数据库表字段一一对应。

### 2.2 VideoRequest请求类
位于 `src/main/java/net/xdclass/online_xdclass/model/request/VideoRequest.java`

该类用于接收前端传入的视频数据,包含以下字段:
- title: 视频标题
- summary: 视频概述
- coverImg: 封面图片URL
- price: 视频价格(分)
- createTime: 创建时间
- point: 视频评分

## 3. Mapper接口实现

### 3.1 Mapper XML配置
位于 `src/main/resources/mapper/VideoMapper.xml`

#### 批量插入方法
```xml
<insert id="addBatch" useGeneratedKeys="true" parameterType="Video">
    INSERT INTO `video` (`title`,`summary`,`cover_img`,`price`,`create_time`,`point`)
    VALUES
    <foreach collection="list" item="video" separator=",">
        (#{video.title,jdbcType=VARCHAR},#{video.summary,jdbcType=VARCHAR},
         #{video.coverImg,jdbcType=VARCHAR},#{video.price,jdbcType=INTEGER},
        #{video.createTime,jdbcType=TIMESTAMP},#{video.point,jdbcType=DOUBLE})
    </foreach>
</insert>
```

## 4. 服务层实现

### 4.1 服务接口
位于 `src/main/java/net/xdclass/online_xdclass/service/VideoService.java`

### 4.2 服务实现
位于 `src/main/java/net/xdclass/online_xdclass/service/impl/VideoServiceImpl.java`

服务层通过调用Mapper接口实现批量插入功能。

## 5. 控制器接口

### 5.1 接口定义
位于 `src/main/java/net/xdclass/online_xdclass/controller/VideoController.java`

#### 批量新增视频接口
```java
@PostMapping("addList")
public JsonData addList(@RequestBody List<VideoRequest> videoRequest){
    int row = videoService.addBatch(videoRequest);
    if (row > 0){
        return JsonData.buildSuccess("新增成功");
    }else{
        return JsonData.buildError("新增失败");
    }
}
```

### 5.2 接口说明
- **请求路径**: `/api/v1/pub/video/addList`
- **请求方法**: POST
- **请求参数**: JSON数组,包含多个VideoRequest对象
- **响应格式**: JSON格式的统一返回结果

## 6. 接口请求示例

### 6.1 请求格式
```http
POST /api/v1/pub/video/addList
Content-Type: application/json

[
  {
    "title": "Java基础入门",
    "summary": "本课程讲解Java语言的基础知识",
    "cover_img": "https://example.com/images/java.jpg",
    "price": 9900,
    "point": 9.5
  },
  {
    "title": "Spring Boot实战",
    "summary": "Spring Boot框架开发实战教程",
    "cover_img": "https://example.com/images/spring.jpg",
    "price": 12900,
    "point": 9.8
  }
]
```

### 6.2 成功响应
```json
{
  "code": 0,
  "msg": "新增成功",
  "data": null
}
```

### 6.3 失败响应
```json
{
  "code": 1,
  "msg": "新增失败",
  "data": null
}
```

## 7. Apifox测试配置

### 7.1 接口配置
- **路径**: `/api/v1/pub/video/addList`
- **方法**: POST
- **请求头**: `Content-Type: application/json`

### 7.2 请求体示例
```json
[
  {
    "title": "测试视频1",
    "summary": "这是一个测试视频",
    "cover_img": "https://example.com/test.jpg",
    "price": 0,
    "point": 8.5
  }
]
```

## 8. 开发注意事项

### 8.1 字段长度限制
- title: 最大524字符
- summary: 最大1026字符
- cover_img: 最大524字符

### 8.2 数据类型说明
- price: 以分为单位(如100元=10000分)
- point: 0-10之间的双精度浮点数,保留2位小数
- create_time: 由后端自动填充

### 8.3 批量操作说明
- 支持批量插入多个视频
- 插入成功返回影响的行数
- 若影响行数大于0则表示成功