文章目录
一、介绍
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系 数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。
Mongo最大 的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查 询的绝大部分功能,而且还支持对数据建立索引。
二、直接进入正题
2.1 依赖
<!--spring boot data mongodb-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
2.2 MongoDB操作攻略评论的crud接口
/**
* MongoDB操作攻略评论的crud接口, 功能类似于mybatis中mapper
* 但是功能更加强大, 因为依赖spring-data-jpa这个
* extends MongoRepository...
*/
@Repository
public interface ITravelCommentRepository extends MongoRepository<TravelComment,String>{
}
2.3 设计mongodb的对象
/**
* mongodb初始化对象
*/
@Setter
@Getter
@Document("front_page_comment")
public class FrontPageComment implements Serializable {
/**
* 普通评论
*/
public static final int TRAVLE_COMMENT_TYPE_COMMENT = 0;
/**
* 评论的评论
*/
public static final int TRAVLE_COMMENT_TYPE = 1;
//公布
public static final int STATE_NORMAL = 0;
//隐藏
public static final int STATE_HIDDEN = 1;
@Id
private String id;
private Long userId;
private String username;
private String headUrl;
private int type = TRAVLE_COMMENT_TYPE_COMMENT;
private Date createTime;
private String content;
private int state = STATE_NORMAL;
private FrontPageComment refComment;
public String getTypeName(){
if(type == TRAVLE_COMMENT_TYPE_COMMENT){
return "普通评论";
}else{
return "评论的评论";
}
}
}
2.4 判断是第一层楼, 则不对第二层楼赋值. 判断是第二层楼, 便对第二层楼赋值
这个方法的解释: findById 的设计思路, 其中的Id, 必须是对象中已有的属性, 不然就会出现报错, 这个也是spring-data的特征
@Override
public TravelComment save(TravelComment comment) {
if(!StringUtils.hasLength(comment.getId())){
comment.setCreateTime(new Date());
}
//判断是一级还是二级操作,
if(comment.getType() == TravelComment.TRAVLE_COMMENT_TYPE){
//Java8 新特性 获取对象
Optional<TravelComment> op
= repository.findById(comment.getRefComment().getId());
//储存入属性对象中
comment.setRefComment(op.get());
}
//对数据进行保存
return repository.save(comment);
}
2.5 创建测试类
@Test
void testMongoInit(){
FrontPageComment frontPageComment = new FrontPageComment();
frontPageComment.setUserId(1L);
frontPageComment.setUsername("三楼");
frontPageComment.setType(0);
frontPageComment.setContent("干干你嘛");
frontPageComment.setState(0);
// FrontPageComment frontPageComment1 = new FrontPageComment();
// frontPageComment1.setId("5f0eb16168d0f53c8f812bd7");
// frontPageComment1.setUserId(2L);
// frontPageComment1.setUsername("小猪");
// frontPageComment1.setType(1);
// frontPageComment1.setContent("干你嘛");
// frontPageComment1.setState(0);
//
// frontPageComment.setRefComment(frontPageComment1);
String s = JSONObject.toJSONString(frontPageComment);
// frontPageCommentServiceImp.saveOrUpdate(frontPageComment);
}