SpingBoot 整合 MongoDB

2022-01-17 15:21:02 浏览数 (1)

引入Maven依赖

代码语言:javascript复制
        <!--Mongodb的驱动包-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

配置 数据源 yml

代码语言:javascript复制
spring:
  application:
    name: comment
  #数据源配置
  data:
    mongodb:
      # 主机地址
      host: 127.0.0.1
      # 数据库
      database: Comment
      # 默认端口是27017
      port: 27017

配置类

代码语言:javascript复制
尚未填写

案例:简单用法

代码语言:javascript复制
先注入
    @Autowired
    private MongoTemplate mongoTemplate;


在使用相应的方法执行相应的操作
    this.mongoTemplate.updateFirst(query,update,Comment.class);

关于MongoDB Java 实体类的设置

首先,要在类上追加 @Document(collection = “集合名”) ,指定集合

主键字段上 追加 @Id 注解 :声明此字段是对应文档的主键

其他字段,一般就@Field(“xxx”) 其中:xxx 代表MongoDB的对应集合的字段名

注意 :实体类名,在插入对象的时候,不指定文档名,就会默认以实体类名为文档名,与@Document 指定的集合名无关

实体类示例:

代码语言:javascript复制
/**
 * @author : zanglikun
 * @date : 2021/7/16 9:25
 * @Version: 1.0
 * @Desc : 这是访客实体类,并声明问MongoDB的数据库 集合
 */

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

@ApiModel("访客")
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "Vis")
public class Visitors implements java.io.Serializable {

    private static final long serialVersionUID = 2811682148052386573L;
    
    @Id
    @ApiModelProperty("MongoDB记录id")
    private ObjectId id;
    
    @Field("userId")
    @ApiModelProperty("我的id")
    private Long userId;
    
    @ApiModelProperty("来访用户id")
    private Long visitorUserId;
    
    @ApiModelProperty("来源,如首页、圈子等")
    private String from;
    
    @ApiModelProperty("来访时间")
    private Long date;
    
    @ApiModelProperty("得分")
    private Double score; //得分

}
代码语言:javascript复制
/**
 * @author : zanglikun
 * @date : 2021/12/6 18:48
 * @Version: 1.0
 * @Desc :MongoDB 分页参数 调用此方法skip参数是getPageNumber的值,pageSize正常使用即可

 */
public class MongoDbPageUtils {

    /*
        skip( pageSize * (pageNum - 1) ).limit( pageSize )
     */
    public static Integer getPageNumber(Integer pageNum, Integer pageSize) {
        return pageSize * (pageNum - 1);
    }
}

MongoTemplate 常用的方法 (CRUD)

代码语言:javascript复制
插入数据
       this.mongoTemplate.insert(数据,表名);
       this.mongoTemplate.save(数据,表名);
       对比:insert 可以插入多个数据,而save是单条插入


查询数据
        Query query = new Query();
        // 设置查询条件
        query.addCriteria(Criteria.where("字段名").is(字段值));
        // 设置分页(使用skip与limit实现的分页)
        query.skip(页数);
        query.limit(条数);
        // 设置排序规则
        // 老版本的排序 query.with(new Sort(Sort.Direction.DESC, "字段名"));
        // 新版的排序 
        query.with(Sort.by(Sort.Direction.DESC,"字段名"));
        this.mongoTemplate.find(query, Visitors.class,"集合名");


更新数据
        // 创建查询
        Query query = new Query();
        // 设置查询参数
        query.addCriteria(Criteria.where("userId").is(3).and("date").ne(0));
        // 创建更新
        Update update = new Update();
        // 修改更新参数
        update.set("date",8888);
        // 执行更新,只更新匹配到的第一条
        //UpdateResult visitor = this.mongoTemplate.updateFirst(query, update, "Visitor");
        // 更新多条
        //UpdateResult visitor = this.mongoTemplate.updateMulti(query, update, "Visitor");
        // 更新为数据 如果数据不存在,就插入,有就修改(不建议使用!不确定会影响几条数据!)
        UpdateResult visitor = this.mongoTemplate.upsert(query, update, "Visitor");
        // 结果为 AcknowledgedUpdateResult{matchedCount=1, modifiedCount=1, upsertedId=null}


删除记录
    public void DeleteVisitor() {
        // 创建查询
        Query query = new Query();
        // 设置查询参数
        query.addCriteria(Criteria.where("userId").is(3).and("date").is(0));
        // 执行更新
        DeleteResult result = this.mongoTemplate.remove(query,"Visitor");
        // 结果为 AcknowledgedDeleteResult{deletedCount=0}
    }


求和
        mongoTemplate.count(query, "集合名")


删除数据库 (集合)
        this.mongoTemplate.dropCollection("集合名");
        this.mongoTemplate.dropCollection(.Class);    
   

查询数据
        Query query = new Query();
        // 设置查询条件
        query.addCriteria(Criteria.where("字段名").is(字段值));
        // 设置分页
        query.skip(MongoDbPageUtils.pageNumber(页数,每页显示条数));
        query.limit(Math.toIntExact(条));
        // 设置排序规则
        query.with(new Sort(Sort.Direction.DESC, "字段名"));
        this.mongoTemplate.find(query, Visitors.class,"集合名");


更新数据
        // 创建查询
        Query query = new Query();
        // 设置查询参数
        query.addCriteria(Criteria.where("userId").is(3).and("date").ne(0));
        // 创建更新
        Update update = new Update();
        // 修改更新参数
        update.set("date",0);
        // 执行更新
        UpdateResult visitor = this.mongoTemplate.updateFirst(query, update, "Visitor");
        // 结果为 AcknowledgedUpdateResult{matchedCount=1, modifiedCount=1, upsertedId=null}


求和
        mongoTemplate.count(query, "集合名")


删除数据库 (集合)
        this.mongoTemplate.dropCollection("集合名");
        this.mongoTemplate.dropCollection(.Class);

特殊说明: 解决问题的光鲜,藏着磕Bug的痛苦。 万物皆入轮回,谁也躲不掉! 以上文章,均是我实际操作,写出来的笔记资料,不会出现全文盗用别人文章!烦请各位,请勿直接盗用!

0 人点赞