一、 需求
设计一个网站评论的数据库表设计,实现的功能如下
- 对于一个问题的主评论
- 对于一个评论的子评论
二、 设计
字段名称 | 字段含义 | 字段类型 | 备注 |
---|---|---|---|
_id | ID | String | 主键 |
articleId | 文章id | String | 文章的id |
content | 评论内容 | String | |
userId | 评论人id | String | |
nickName | 评论人昵称 | String | |
createDatetime | 评论时间 | Date | |
likeNum | 点赞数 | int32 | |
replyNum | 回复数 | int32 | |
state | 状态 | String | 0为不可见,1可见 |
parentId | 父类id | String | 父类id,用于评论下面添加评论 |
三、 实现
-
技术选型
-
mongodb-driver
是mongo官方推出的java连接mongodb的驱动包,相当于JDBC驱动 -
SpringDataMongoDb
springData家族成员之一,用于操作MongoDb的持久层框架,封装了底层的mongodb-driver
-
-
pom依赖
<!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-mongodb -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>2.2.0.RELEASE</version>
</dependency>
- 文件配置
<!-- application.properties -->
spring.data.mongodb.uri=mongodb://127.0.0.1:27017/articaledb
- 项目核心代码
-
dao层
public interface CommentRepository extends MongoRepository<Comment, String> {}
-
service层
- 接口
public interface CommentService { List<Comment> saveAll(Iterable<Comment> var1); List<Comment> findAll(); List<Comment> findAll(Sort var1); Comment insert(Comment var1); List<Comment> insert(Iterable<Comment> var1); List<Comment> findAll(Example<Comment> var1); List<Comment> findAll(Example<Comment> var1, Sort var2); Page<Comment> findByParentId(String parentId, int page, int size); void update(String id); }
- 实现类
@Service public class CommentServiceImpl implements CommentService { @Autowired CommentRepository commentRepository; @Autowired MongoTemplate mongoTemplate; @Override public List<Comment> saveAll(Iterable<Comment> var1) { return commentRepository.saveAll(var1); } @Override public List<Comment> findAll() { return commentRepository.findAll(); } @Override public List<Comment> findAll(Sort var1) { return commentRepository.findAll(var1); } @Override public Comment insert(Comment var1) { return commentRepository.insert(var1); } @Override public List<Comment> insert(Iterable<Comment> var1) { return commentRepository.insert(var1); } @Override public List<Comment> findAll(Example<Comment> var1) { return commentRepository.findAll(var1); } @Override public List<Comment> findAll(Example<Comment> var1, Sort var2) { return commentRepository.findAll(var1, var2); } @Override public Page<Comment> findByParentId(String parentId, int page, int size) { return commentRepository.findByParentId(parentId, PageRequest.of(page-1,size)); } @Override public void update(String id) { Query query = Query.query(Criteria.where("_id").is(id)); Update update = new Update(); update.inc("likeNum"); mongoTemplate.updateFirst(query, update, "comment"); } }
-
测试类
@SpringBootTest @RunWith(SpringRunner.class) class CommentServiceImplTest { @Autowired CommentService commentService; /** 查询全部 **/ @Test void findAll() { List<Comment> comments = commentService.findAll(); System.out.println(comments); } /** 保存 **/ @Test void insert() { Comment comment = new Comment(); comment.setContent("这是一条评论"); comment.setPublishDate(new Date()); comment.setUserId("1"); comment.setUserName("马"); comment.setCreateDatetime(LocalDateTime.now()); comment.setLikeNum(100); comment.setReplyNum(100); comment.setState("1"); comment.setArticaleId("25"); commentService.insert(comment); } @Test void findByParentId() { commentService.findByParentId("3", 1, 2); } @Test void update() { String id="1"; commentService.update(id); } }
-
网友评论