tb_blog: 探店店笔记表,包含笔记中的标题、文字、图片等
Field | Type | Collation | Null | Key | Default | Extra | Comment |
---|---|---|---|---|---|---|---|
id | bigint unsigned | (NULL) | NO | PRI | (NULL) | auto_increment | 主键 |
shop_id | bigint | (NULL) | NO | (NULL) | 商户id | ||
user_id | bigint unsigned | (NULL) | NO | (NULL) | 用户id | ||
title | varchar(255) | utf8mb4_unicode_ci | NO | (NULL) | 标题 | ||
images | varchar(2048) | utf8mb4_general_ci | NO | (NULL) | 探店的照片,最多9张,多张以”,”隔开 | ||
content | varchar(2048) | utf8mb4_unicode_ci | NO | (NULL) | 探店的文字描述 | ||
liked | int unsigned | (NULL) | YES | 0 | 点赞数量 | ||
comments | int unsigned | (NULL) | YES | (NULL) | 评论数量 | ||
create_time | timestamp | (NULL) | NO | CURRENT_TIMESTAMP | DEFAULT_GENERATED | 创建时间 | |
update_time | timestamp | (NULL) | NO | CURRENT_TIMESTAMP | DEFAULT_GENERATED on update CURRENT_TIMESTAMP | 更新时间 |
@TableField(exist = false)
用来解决实体类中有的属性但是数据表中没有的字段@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("tb_blog")
public class Blog implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 商户id
*/
private Long shopId;
/**
* 用户id
*/
private Long userId;
/**
* 用户图标
*/
@TableField(exist = false)
private String icon;
/**
* 用户姓名
*/
@TableField(exist = false)
private String name;
/**
* 是否点赞过了
*/
@TableField(exist = false)
private Boolean isLike;
/**
* 标题
*/
private String title;
/**
* 探店的照片,最多9张,多张以","隔开
*/
private String images;
/**
* 探店的文字描述
*/
private String content;
/**
* 点赞数量
*/
private Integer liked;
/**
* 评论数量
*/
private Integer comments;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
tb_blog_comments
Field | Type | Collation | Null | Key | Default | Extra | Comment |
---|---|---|---|---|---|---|---|
id | bigint unsigned | (NULL) | NO | PRI | (NULL) | auto_increment | 主键 |
user_id | bigint unsigned | (NULL) | NO | (NULL) | 用户id | ||
blog_id | bigint unsigned | (NULL) | NO | (NULL) | 探店id | ||
parent_id | bigint unsigned | (NULL) | NO | (NULL) | 关联的1级评论id,如果是一级评论,则值为0 | ||
answer_id | bigint unsigned | (NULL) | NO | (NULL) | 回复的评论id | ||
content | varchar(255) | utf8mb4_general_ci | NO | (NULL) | 回复的内容 | ||
liked | int unsigned | (NULL) | YES | (NULL) | 点赞数 | ||
status | tinyint unsigned | (NULL) | YES | (NULL) | 状态,0:正常,1:被举报,2:禁止查看 | ||
create_time | timestamp | (NULL) | NO | CURRENT_TIMESTAMP | DEFAULT_GENERATED | 创建时间 | |
update_time | timestamp | (NULL) | NO | CURRENT_TIMESTAMP | DEFAULT_GENERATED on update CURRENT_TIMESTAMP | 更新时间 |
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("tb_blog")
public class Blog implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 商户id
*/
private Long shopId;
/**
* 用户id
*/
private Long userId;
/**
* 用户图标
*/
@TableField(exist = false)
private String icon;
/**
* 用户姓名
*/
@TableField(exist = false)
private String name;
/**
* 是否点赞过了
*/
@TableField(exist = false)
private Boolean isLike;
/**
* 标题
*/
private String title;
/**
* 探店的照片,最多9张,多张以","隔开
*/
private String images;
/**
* 探店的文字描述
*/
private String content;
/**
* 点赞数量
*/
private Integer liked;
/**
* 评论数量
*/
private Integer comments;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
对应的代码
@PostMapping
public Result saveBlog(@RequestBody Blog blog) {
// 获取登录用户
UserDTO user = UserHolder.getUser();
blog.setUserId(user.getId());
// 保存探店博文
blogService.save(blog);
// 返回id
return Result.ok(blog.getId());
}
@PostMapping("blog")
public Result uploadImage(@RequestParam("file") MultipartFile image) {
try {
// 获取原始文件名称
String originalFilename = image.getOriginalFilename();
// 生成新文件名
String fileName = createNewFileName(originalFilename);
// 保存文件
image.transferTo(new File(SystemConstants.IMAGE_UPLOAD_DIR, fileName));
// 返回结果
log.debug("文件上传成功,{}", fileName);
return Result.ok(fileName);
} catch (IOException e) {
throw new RuntimeException("文件上传失败", e);
}
}
<aside> 💡
注意:这里我们需要修改SystemConstants.IMAGE_UPLOAD_DIR
为自己图片所在的地址,在实际开发中图片一般会放在nginx上或者是云存储上。
</aside>
需求:点击首页的探店笔记,会进入详情页面,我们现在需要实现页面的查询接口
随便点击一张图片,查看发送的请求
请求网址: http://localhost:8080/api/blog/6
请求方法: GET
看样子是BlogController
下的方法,请求方式为GET,那我们直接来编写对应的方法
业务逻辑我们要写在Service层,Controller层只调用