spring-boot-starter-data-mongodb如何搭建盖楼聊天功能

一、介绍

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);
    }
    
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值