美文网首页java学习
MongoDb(三)实战小事例

MongoDb(三)实战小事例

作者: Mrhy1996 | 来源:发表于2020-04-21 13:19 被阅读0次

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

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

二、 设计

字段名称 字段含义 字段类型 备注
_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依赖

  <!-- 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>
  1. 文件配置
<!-- application.properties -->
spring.data.mongodb.uri=mongodb://127.0.0.1:27017/articaledb
  1. 项目核心代码
    1. dao层

       public interface CommentRepository extends MongoRepository<Comment, String> {}
      
    2. service层

      1. 接口
      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);
      }
      
      1. 实现类
      @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");
      }
      }
      
       
      
    3. 测试类

    @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);
      }
    }
    

相关文章

网友评论

    本文标题:MongoDb(三)实战小事例

    本文链接:https://www.haomeiwen.com/subject/yjjuihtx.html