1.添加maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb-reactive</artifactId>
</dependency>
2.spring配置
mongodb可以不用用户名和密码访问。
spring:
data:
mongodb:
database: springmongodb
host: localhost
port: 27017
#username: spring
#password: 123456
3.操作mongodb
使用MongoTemplate操数据库,进行增删改查。
@Document标准pojo为文档实体类,@Id标注文档主键,@Field关联pojo和数据库中的字段。
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
@Service
public class UserService {
// 操作mongodb的模板
@Autowired
private MongoTemplate mongoTemplate;
// 数据库集合名称
private String collectionName = "user";
// 保存或更新
public User insert(User user) {
// 保存,主键已有则更新其所有属性
return mongoTemplate.save(user, collectionName);
}
// 根据主键查询
public User findById(String id) {
return mongoTemplate.findById(id, User.class, collectionName);
}
// 条件查询,or
public List<User> findUsers(String name, String note) {
Criteria criteriaName = Criteria.where("name").regex(name);
Criteria criteriaNote = Criteria.where("note").regex(note);
Criteria criteria = new Criteria();
criteria.orOperator(criteriaName, criteriaNote);// 或者
Query query = Query.query(criteria).limit(100).skip(0);
return mongoTemplate.find(query, User.class, collectionName);
}
// 条件查询,and
public List<User> findUsers2(String name, int age) {
Criteria criteria = Criteria.where("name").regex(name).and("age").is(age); // 并且
Query query = Query.query(criteria).limit(100).skip(0);
return mongoTemplate.find(query, User.class, collectionName);
}
// 根据主键更新,如果所有属性都没有变化则getModifiedCount返回0
public long updateById(String id, String note, int age) {
Criteria criteria = Criteria.where("id").is(id);
Update update = Update.update("note", note);
update.set("age", age);
Query query = Query.query(criteria);
UpdateResult updateResult = mongoTemplate.updateMulti(query, update, User.class, collectionName);
return updateResult.getModifiedCount();
}
// 根据主键删除
public long deleteById(String id) {
Criteria criteria = Criteria.where("id").is(id);
Query query = Query.query(criteria);
DeleteResult deleteResult = mongoTemplate.remove(query, User.class, collectionName);
return deleteResult.getDeletedCount();
}
}
创建文档实体类:User.java
import java.io.Serializable;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
// 文档实体类
@Document //该pojo将作为MongoDB文档存在
public class User implements Serializable{//必须实现序列化接口
private static final long serialVersionUID = 7767440606893451627L;
@Id //文档主键
private String id;
@Field("name")//关联数据库中的字段,二者不同时标注,相同则不用标注
private String name;
private int age;
private String note;
//setters and getters
}
上个图感受一下数据库内的数据:
还有部分测试代码为贴上,已上传github:https://github.com/zhangyangfei/SpringBootLearn.git中的spring-mongodb工程。