引入Maven依赖
<!--Mongodb的驱动包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
配置 数据源 yml
spring:
application:
name: comment
#数据源配置
data:
mongodb:
# 主机地址
host: 127.0.0.1
# 数据库
database: Comment
# 默认端口是27017
port: 27017
配置类
尚未填写
案例:简单用法
//先注入
@Autowired
private MongoTemplate mongoTemplate;
//再使用相应的方法执行相应的操作
this.mongoTemplate.updateFirst(query,update,Comment.class);
关于MongoDB Java 实体类的设置
首先,要在类上追加 @Document(collection = "集合名") ,指定集合
在主键字段上 追加 @Id 注解 :声明此字段是对应文档的主键
其他字段,一般就@Field("xxx") 其中:xxx 代表MongoDB的对应集合的字段名
注意 :实体类名,在插入对象的时候,不指定文档名,就会默认以实体类名为文档名,与@Document 指定的集合名无关
实体类示例:
/**
* @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; //得分
}
/**
* @author : zanglikun
* @date : 2021/12/6 18:48
* @Version: 1.0
* @Desc :MongoDB 分页参数 调用getPageNumber此方法 用于skip()的参数,pageSize正常使用,是limit正常使用。即可
*/
public class MongoDbPageUtils {
/*
MongoDB分页代码是:skip(X).limit(Y),其中x,y是参数
*/
public static Integer getPageNumber(Integer pageNum, Integer pageSize) {
return pageSize * (pageNum - 1);
}
}
MongoTemplate 常用的方法 (CRUD)
插入数据
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,"集合名");
特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
评论(0)