spring boot MongoDB实战(一)https://developer.aliyun.com/article/1391839
- 创建业务逻辑类 onenewcode.article包下创建service包,包下创建类
import onenewcode.article.po.Comment; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; //评论的业务层 @Service public class CommentService { //注入dao @Autowired private CommentRepository commentRepository; /** * 保存一个评论 * @param comment */ public void saveComment(Comment comment){ //如果需要自定义主键,可以在这里指定主键;如果不指定主键,MongoDB会自动生成主键 //设置一些默认初始值。。。 //调用dao commentRepository.save(comment); } /** * 更新评论 * @param comment */ public void updateComment(Comment comment){ //调用dao commentRepository.save(comment); } /** * 根据id删除评论 * @param id */ public void deleteCommentById(String id){ //调用dao commentRepository.deleteById(id); } /** * 查询所有评论 * @return */ public List<Comment> findCommentList(){ //调用dao return commentRepository.findAll(); } /** * 根据id查询评论 * @param id * @return */ public Comment findCommentById(String id){ //调用dao return commentRepository.findById(id).get(); } }
- 新建Junit测试类,测试保存和查询所有:
package onenewcode.article.service; import onenewcode.article.ArticleApplication; import onenewcode.article.po.Comment; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.domain.Page; import org.springframework.test.context.junit4.SpringRunner; import java.time.LocalDateTime; import java.util.List; //测试评论的业务层 //SpringBoot的Junit集成测试 //SpringBoot的测试环境初始化,参数:启动类 @SpringBootTest public class CommentServiceTest { //注入Service @Autowired private CommentService commentService; /** * 保存一个评论 */ @Test public void testSaveComment(){ Comment comment=new Comment(); comment.setArticleid("100000"); comment.setContent("测试添加的数据"); comment.setCreatedatetime(LocalDateTime.now()); comment.setUserid("1003"); comment.setNickname("凯撒大帝"); comment.setState("1"); comment.setLikenum(0); comment.setReplynum(0); commentService.saveComment(comment); } /** * 查询所有数据 */ @Test public void testFindAll(){ List<Comment> list = commentService.findCommentList(); System.out.println(list); } /** * 测试根据id查询 */ @Test public void testFindCommentById(){ Comment comment = commentService.findCommentById("5d6a27b81b8d374798cf0b41"); System.out.println(comment); } }
添加结果:
根据上级ID查询文章评论的分页列表
- CommentRepository新增方法定义
//根据父id,查询子评论的分页列表 Page findByParentid(String parentid, Pageable pageable);
- CommentService新增方法
/** * 根据父id查询分页列表 * @param parentid * @param page * @param size * @return */ public Page<Comment> findCommentListPageByParentid(String parentid,int page ,int size){ return commentRepository.findByParentid(parentid, PageRequest.of(page-1,size)); }
- junit测试用例
/** * 测试根据父id查询子评论的分页列表 */ @Test public void testFindCommentListPageByParentid(){ Page<Comment> pageResponse = commentService.findCommentListPageByParentid("3", 1, 2); System.out.println("----总记录数:"+pageResponse.getTotalElements()); System.out.println("----当前页数据:"+pageResponse.getContent()); }
MongoTemplate实现评论点赞
以下点赞的临时示例代码: CommentService 新增updateThumbup方法
/** * 点赞-效率低 * @param id */ public void updateCommentThumbupToIncrementingOld(String id){ Comment comment = CommentRepository.findById(id).get(); comment.setLikenum(comment.getLikenum()+1); CommentRepository.save(comment); }
以上方法虽然实现起来比较简单,但是执行效率并不高,因为我只需要将点赞数加1就可以了,没必要查询出所有字段修改后再更新所有字
段。(蝴蝶效应)
我们可以使用MongoTemplate类来实现对某列的操作。 (1)修改CommentService
//注入MongoTemplate @Autowired private MongoTemplate mongoTemplate; /** * 点赞数+1 * @param id */ public void updateCommentLikenum(String id){ //查询对象 Query query=Query.query(Criteria.where("_id").is(id)); //更新对象 Update update=new Update(); //局部更新,相当于$set // update.set(key,value) //递增$inc // update.inc("likenum",1); update.inc("likenum"); } //参数1:查询对象 //参数2:更新对象 //参数3:集合的名字或实体类的类型Comment.class mongoTemplate.updateFirst(query,update,"comment"); }
- 测试用例:
/** * 点赞数+1 */ @Test public void testUpdateCommentLikenum(){ //对3号文档的点赞数+1 commentService.updateCommentLikenum("3"); }
GITHUB
代码仓库
https://github.com/onenewcode/MyMongoDB.git