MongoDb(三)实战小事例

一、 需求
设计一个网站评论的数据库表设计,实现的功能如下

  • 对于一个问题的主评论
  • 对于一个评论的子评论

二、 设计

字段名称 字段含义 字段类型 备注
_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,用于评论下面添加评论

三、 实现

  1. 技术选型

    1. mongodb-driver
      是mongo官方推出的java连接mongodb的驱动包,相当于JDBC驱动

    2. SpringDataMongoDb
      springData家族成员之一,用于操作MongoDb的持久层框架,封装了底层的mongodb-driver

  2. pom依赖

  
        
            org.springframework.data
            spring-data-mongodb
            2.2.0.RELEASE
        
  1. 文件配置

spring.data.mongodb.uri=mongodb://127.0.0.1:27017/articaledb
  1. 项目核心代码
    1. dao层

       public interface CommentRepository extends MongoRepository {}
      
    2. service层

      1. 接口
      public interface CommentService {
      List saveAll(Iterable var1);
      
      List findAll();
      
      List findAll(Sort var1);
      
      Comment insert(Comment var1);
      
      List insert(Iterable var1);
      
      List findAll(Example var1);
      
      List findAll(Example var1, Sort var2);
      Page findByParentId(String parentId, int page, int size);
      void update(String id);
      }
      
      1. 实现类
      @Service
      public class CommentServiceImpl implements CommentService {
      @Autowired
       CommentRepository commentRepository;
       @Autowired
      MongoTemplate mongoTemplate;
      
      
      
      
      @Override
       public List saveAll(Iterable var1) {
          return commentRepository.saveAll(var1);
       }
      
        @Override
        public List findAll() {
           return commentRepository.findAll();
        }
      
       @Override
        public List findAll(Sort var1) {
           return commentRepository.findAll(var1);
       }
      
        @Override
       public Comment insert(Comment var1) {
           return commentRepository.insert(var1);
        }
      
        @Override
        public List insert(Iterable var1) {
            return commentRepository.insert(var1);
        }
      
       @Override
        public List findAll(Example var1) {
            return commentRepository.findAll(var1);
        }
      
        @Override
        public List findAll(Example var1, Sort var2) {
            return commentRepository.findAll(var1, var2);
       }
        @Override
        public Page 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");
      }
      }
      
       
      
    3. 测试类

    @SpringBootTest
    @RunWith(SpringRunner.class)  
    class CommentServiceImplTest {
      @Autowired
      CommentService commentService;
      /**
      查询全部
      **/
    
      @Test
      void findAll() {
          List 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);
      }
    }
    

你可能感兴趣的:(MongoDb(三)实战小事例)