SpringBoot-MongoDB整合版V1.0.0

SpringBoot-MongoDB整合版V1.0.0

  • 项目整合流程为:mongodb->dao->service->单元测试Test

1.创建springboot项目

1.1创建项目如下图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xGutuElQ-1650730001250)(C:\Users\Dougl\AppData\Roaming\Typora\typora-user-images\1650706787741.png)]

1.2引入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.douglas</groupId>
    <artifactId>springboot_mongodb</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--这里使项目继承springboot框架-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
        <relativePath/>
    </parent>

    <dependencies>
        <!--springboot-test测试依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--springboot-mongodb依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
    </dependencies>
</project>

1.3创建application.yml

spring:
  data:   #数据源
    mongodb:
      host: 101.43.89.105  #ip地址
      database: douglas    #数据库名称
      port: 27017          #端口号
      #uri: mongodb://101.43.89.105:27017/douglas   #也可以使用这种方式连接

1.4创建启动类

package com.douglas.mymongo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @Description
 * @Author 以梦为馬 <Douglas1314@126.com>
 * @Version V1.0.0
 * @Date 2022-04-23 17:58
 **/
@SpringBootApplication
public class MyMongoApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyMongoApplication.class,args);
    }
}

在这里插入图片描述

1.5启动项目

  • 启动项目检查控制台是否有错,能否正常启动
  • 检查mongodb是否打开连接成功
    在这里插入图片描述

2.文章评论案例实现CRUD

2.1创建评论实体类

  • 创建mongodb集合对应的java实体对象
package com.douglas.mymongo.po;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;

/**
 * @Description
 * @Author 以梦为馬 <Douglas1314@126.com>
 * @Version V1.0.0
 * @Date 2022-04-23 20:11
 * 1.如果要把一个java类声明为mongodb文档,可以通过@Document注解配置collection参数指定这个类对应的文档
 * 2.如果该类类名的小写与mongodb映射集合名一致,则可以省略@Document配置
 **/

@Document(collection = "comment")
//@CompoundIndex(def = "{'userid':1,'nickname':-1}") //复合索引
public class Comment implements Serializable {

    /**
     * 主键标识,该属性的值会自动对应mongodb的主键字段"_id",如果该属性名就叫"id"则该注解可以省略,否则必须写
     */
    @Id
    private String id;

    /**
     * 吐槽内容
     * 该属性对应mongodb的字段名称,如果一致,则无需该注解
     */
    @Field("content")
    private String content;

    /**
     * 发布人id
     * 添加了一个单字段的索引
     */
    @Indexed
    private String userid;

    /**
     * 发布日期
     */
    private Date publishtime;

    /**
     * 昵称
     */
    private String nickname;

    /**
     * 评论日期时间
     */
    private LocalDateTime createdatatime;

    /**
     * 点赞数
     */
    private Integer likenum;

    /**
     * 回复数
     */
    private Integer replynum;

    /**
     * 状态
     */
    private String state;

    /**
     * 上级ID
     */
    private String parentid;

    /**
     * 文章编号
     */
    private String articleid;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getUserid() {
        return userid;
    }

    public void setUserid(String userid) {
        this.userid = userid;
    }

    public Date getPublishtime() {
        return publishtime;
    }

    public void setPublishtime(Date publishtime) {
        this.publishtime = publishtime;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public LocalDateTime getCreatedatatime() {
        return createdatatime;
    }

    public void setCreatedatatime(LocalDateTime createdatatime) {
        this.createdatatime = createdatatime;
    }

    public Integer getLikenum() {
        return likenum;
    }

    public void setLikenum(Integer likenum) {
        this.likenum = likenum;
    }

    public Integer getReplynum() {
        return replynum;
    }

    public void setReplynum(Integer replynum) {
        this.replynum = replynum;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public String getParentid() {
        return parentid;
    }

    public void setParentid(String parentid) {
        this.parentid = parentid;
    }

    public String getArticleid() {
        return articleid;
    }

    public void setArticleid(String articleid) {
        this.articleid = articleid;
    }
}

2.2创建评论DAO

  • 创建mongodb对应java的dao接口
package com.douglas.mymongo.dao;

import com.douglas.mymongo.po.Comment;
import org.springframework.data.mongodb.repository.MongoRepository;

/**
 * @Description
 * @Author 以梦为馬 <Douglas1314@126.com>
 * @Version V1.0.0
 * @Date 2022-04-23 20:33
 *
 * ***************************说明****************************************
 * ***********java的Dao必须继承MongoRepository接口*************************
 * ***********设置泛型Comment就是java对应mongodb的实体对象******************
 * ***********设置泛型String就是mongodb中document的主键id类型***************
 **/
public interface CommentRepository extends MongoRepository<Comment,String> {
}
  • 【注意】
    • java的Dao必须继承MongoRepository接口
    • 设置泛型Comment就是java对应mongodb的实体对象
    • 设置泛型String就是mongodb中document的主键id类型
    • 基本的CRUD不用自己重写,直接调用就可以

2.3创建评论Service

  • 创建service接口
package com.douglas.mymongo.service;

import com.douglas.mymongo.po.Comment;

import java.util.List;

/**
 * @Description
 * @Author 以梦为馬 <Douglas1314@126.com>
 * @Version V1.0.0
 * @Date 2022-04-23 20:41
 **/
public interface CommentService {


    /** 
    * 1.新增Comment
    * @author douglas
    * @date 2022/4/23 21:07
    * @param 
    * @return void
    **/
     void saveComment(Comment comment);

     /**
     * 2.更新评论
     * @author douglas
     * @date 2022/4/23 21:24
     * @param
     * @return void
     **/
     void updateComment(Comment comment);

     /**
     * 3.删除评论
     * @author douglas
     * @date 2022/4/23 21:26
     * @param
     * @return void
     **/
     void deleteComment(String id);

     /**
     * 4.查询所有
     * @author douglas
     * @date 2022/4/23 21:28
     * @param
     * @return java.util.List<com.douglas.mymongo.po.Comment>
     **/
     List<Comment> findComment();

     /**
     * 5.根据id查询
     * @author douglas
     * @date 2022/4/23 21:35
     * @param
     * @return com.douglas.mymongo.po.Comment
     **/
     Comment findCommentById(String id);
}
  • 创建service实现类
package com.douglas.mymongo.service.impl;

import com.douglas.mymongo.dao.CommentRepository;
import com.douglas.mymongo.po.Comment;
import com.douglas.mymongo.service.CommentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

/**
 * @Description
 * @Author 以梦为馬 <Douglas1314@126.com>
 * @Version V1.0.0
 * @Date 2022-04-23 20:41
 **/
@Service
public class CommentServiceImpl implements CommentService {

    @Autowired
    private CommentRepository commentRepository;


    @Override
    public void saveComment(Comment comment){
        //可以在这里指定主键,如果不指定使用默认自主生成的
        commentRepository.save(comment);
    }

    @Override
    public void updateComment(Comment comment) {
        commentRepository.save(comment);
    }

    @Override
    public void deleteComment(String id) {
        commentRepository.deleteById(id);
    }

    @Override
    public List<Comment> findComment() {
        return commentRepository.findAll();
    }

    @Override
    public Comment findCommentById(String id) {
        Optional<Comment> comment = commentRepository.findById(id);
        return comment.get();
    }
}

2.4创建单元测试

  • 创建springboot单元测试
package com.douglas.mymongo.service;

import com.douglas.mymongo.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.test.context.junit4.SpringRunner;

import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;

/**
 * @Description
 * @Author 以梦为馬 <Douglas1314@126.com>
 * @Version V1.0.0
 * @Date 2022-04-23 23:24
 **/
@RunWith(SpringRunner.class)
@SpringBootTest
public class CommentServiceTest {

    @Autowired
    private CommentService commentService;


    /**
    *  测试新增
    * @author douglas
    * @date 2022/4/23 23:32
    * @param
    * @return void
    **/
    @Test
    public void saveComment(){
        commentService.saveComment(Comment.builder().articleid("1001")
                                    .content("你是最棒的,加油少年")
                                    .createdatatime(LocalDateTime.now())
                                    .id("1")
                                    .likenum(11)
                                    .nickname("LS")
                                    .parentid("1")
                                    .publishtime(new Date())
                                    .replynum(12)
                                    .state("有效")
                                    .userid("dgc").build()
        );
    }

    /** 
    * 测试更新
    * @author douglas
    * @date 2022/4/23 23:38 
    * @param 
    * @return void
    **/
    @Test
    public void updateComment(){
        commentService.updateComment(Comment.builder()
                .articleid("1002")
                .content("你是最棒的,加油少年")
                .createdatatime(LocalDateTime.now())
                .id("1")
                .likenum(88)
                .nickname("LS")
                .parentid("1")
                .publishtime(new Date())
                .replynum(99)
                .state("有效")
                .userid("516300284106").build());
    }

    /**
    * 测试删除
    * @author douglas
    * @date 2022/4/23 23:42
    * @param
    * @return void
    **/
    @Test
    public void deleteComment(){
        commentService.deleteComment("1");
    }

    /**
    * 全部查询测试
    * @author douglas
    * @date 2022/4/23 23:45
    * @param
    * @return void
    **/
    @Test
    public void findComment(){
        List<Comment> comment = commentService.findComment();
        comment.forEach(s->{
            System.out.println(s.toString());
        });
    }

    /**
    *  根据id查询
    * @author douglas
    * @date 2022/4/23 23:54
    * @param
    * @return void
    **/
    @Test
    public void findCommentById(){
        System.out.println(commentService.findCommentById("1"));
    }
}

3.整合项目框架

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

以梦为馬Douglas

您的鼓励是对我最大的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值