spring作为java中使用程度最广泛的框架,因为开源且支持各种中间件被广大开发者所喜爱.
这里来简单的聊一下,springboot 中对MongoDB的简单运用。
一、环境准备
首先肯定是先新建一个springboot项目(IDEA专业版直接创建,eclipse可以安装sts插件创建)
然后导入依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.14.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
这里用的maven管理项目依赖,gradle的话可以通过这个网址找到相关依赖点击打开链接
然后配置对应的配置文件
data:
mongodb:
uri: mongodb://用户名:密码@mongodb的地址:端口/log1DbName
二、简单操作
1.根据集合创建对应的java实体类
以这个Collection集合为例
public class Collection implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@JSONField(serializeUsing = ToStringSerializer.class)
private Long id;
private String userId;
@DBRef
private InfoQuestion infoQuestion;
private Date createTime;
private int isDelete;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public InfoQuestion getInfoQuestion() {
return infoQuestion;
}
public void setInfoQuestion(InfoQuestion infoQuestion) {
this.infoQuestion = infoQuestion;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public int getIsDelete() {
return isDelete;
}
public void setIsDelete(int isDelete) {
this.isDelete = isDelete;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
创建完实体类后就可以直接去写Service层的逻辑代码(可以跳过dao),在每个service类中注入MongoDB模板
@Autowired
private MongoTemplate mongoTemplate;
spring将MongoDB的大部分操作都封装到MongoTemplate中,通过这个模板来执行对MongoDB的操作
ps:对关系型数据库或者其他非关系型数据库同样有模板(mysql,redis)
下图为部分api
Class一般是指对应实体类的class对象(比如Collection的class对象就为Collection.class)
下面以更新为例
MongoTemplate的更新操作一般是以下几种
对更新、查询操作分别封装了两个对象
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.data.mongodb.core.query.Query;
Query query = new Query(Criteria.where("_id").is("");
//可以查看到Query的源码
/**
* Creates a new {@link Query} using the given {@link CriteriaDefinition}.
*
* @param criteriaDefinition must not be {@literal null}.
* @since 1.6
*/
public Query(CriteriaDefinition criteriaDefinition) {
addCriteria(criteriaDefinition);
}
Criteria的源码
/**
* Static factory method to create a Criteria using the provided key
*
* @param key
* @return
*/
public static Criteria where(String key) {
return new Criteria(key);
}
相当于sql中的where "_id"="参数2"
可以查看到Update类的源码
/**
* Update using the {@literal $set} update modifier
*
* @param key
* @param value
* @return
* @see <a href="https://docs.mongodb.com/manual/reference/operator/update/set/">MongoDB Update operator: $set</a>
*/
public Update set(String key, Object value) {
addMultiFieldOperation("$set", key, value);
return this;
}
Update update = new Update().set("","");
第一个参数是要修改的键值,第二个参数为限制条件(相当于sql中的set “参数1”(字段名)= “参数2”)
最后将对象入参,第三个参数为对应的实体类对象
mongoTemplate.updateFirst(query,update, xxxx.class);