数据库
首页 > 数据库> > SpringBoot整合SpringData MongoDB

SpringBoot整合SpringData MongoDB

作者:互联网

1.创建工程并引入依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.6.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
</dependencies>

2.创建application.yml

spring:
  #数据源配置
  data:
    mongodb:
      #主机地址
      host: 192.168.43.182
      #数据库
      database: articledb
      #默认端口是27017
      port: 27017
      #也可以使用uri连接
      #uri: mongodb://192.168.43.182:27017/articledb

3.创建启动类

@SpringBootApplication
public class ArticleApplication {
    public static void main(String[] args) {
        SpringApplication.run(ArticleApplication.class, args);
    }
}

4.启动项目,看是否能正常启动,控制台没有错误

5.文章评论实体类的编写

/**
 * 文章评论实体类
 */
@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; // 吐槽内容
    private Date publishtime; // 发布日期
    //添加了一个单字段的索引
    @Indexed
    private String userid; // 发布人ID
    private String nickname; // 昵称
    private LocalDateTime createdatetime; // 评论的日期时间
    private Integer likenum; // 点赞数
    private Integer replynum; // 回复数
    private String state;//状态
    private String parentid; // 上级ID
    private String articleid; // 文章id

    /********************* get/set方法 *********************/
}

  说明:
    索引可以大大提升查询效率,一般在查询字段上添加索引,索引的添加可以通过Mongo的命令来添加,也可以在Java的实体类中通过注解添加。
    1)单字段索引注解@Indexed
      声明该字段需要索引,建索引可以大大的提高查询效率。
      Mongo命令参考:db.comment.createIndex({"userid":1})

    2 )复合索引注解@CompoundIndex
      复合索引的声明,建复合索引可以有效地提高多字段的查询效率。
      Mongo命令参考:db.comment.createIndex({"userid":1,"nickname":-1})

6.创建数据访问接口

/**
 * 评论的持久层接口
 */
public interface CommentDao extends MongoRepository<Comment, String> {
}

7.创建业务逻辑类

/**
 * 评论的业务层
 */
@Service
public class CommentService {

    @Autowired
    private CommentDao commentDao;

    /**
     * 保存一个评论
     * @param comment
     */
    public void saveComment(Comment comment) {
        //如果需要自定义主键,可以在这里指定主键;如果不指定主键,MongoDB会自动生成主键
        commentDao.save(comment);
    }

    /**
     * 更新评论
     * @param comment
     */
    public void updateComment(Comment comment) {
        commentDao.save(comment);
    }

    /**
     * 根据id删除评论
     * @param id
     */
    public void deleteCommentById(String id) {
        commentDao.deleteById(id);
    }

    /**
     * 查询所有评论
     * @return
     */
    public List<Comment> findCommentList() {
        return commentDao.findAll();
    }

    /**
     * 根据id查询评论
     * @param id
     * @return
     */
    public Comment findCommentById(String id) {
        return commentDao.findById(id).get();
    }
}

8.测试

@RunWith(SpringRunner.class)
@SpringBootTest(classes = ArticleApplication.class)
public class CommentServiceTest {

    @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("1");
        System.out.println(comment);
    }
}

 

标签:comment,SpringBoot,索引,MongoDB,private,id,String,public,SpringData
来源: https://www.cnblogs.com/roadlandscape/p/12622544.html