本文快速入门,MongoDB 结合SpringBoot starter-data-mongodb 进行增删改查
1、什么是MongoDB ?
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。
MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
2、MongoDB 优缺点
优点
- 文档结构的存储方式,能够更便捷的获取数据
- 内置GridFS,支持大容量的存储
- 海量数据下,性能优越
- 动态查询
- 全索引支持,扩展到内部对象和内嵌数组
- 查询记录分析
- 快速,就地更新
- 高效存储二进制大对象 (比如照片和视频)
- 复制(复制集)和支持自动故障恢复
- 内置 Auto- Sharding 自动分片支持云级扩展性,分片简单
- MapReduce 支持复杂聚合
- 商业支持,培训和咨询
缺点
- MongoDB 4.0 引入的事务功能,支持多文档ACID特性。4.0之前的版本不支持事务操作
- MongoDB 占用空间过大 (不过这个确定对于目前快速下跌的硬盘价格来说,也不算什么缺点了)
- MongoDB没有如MySQL那样成熟的维护工具
- 无法进行关联表查询,不适用于关系多的数据
- 复杂聚合操作通过mapreduce创建,速度慢
- 模式自由,自由灵活的文件存储格式带来的数据错
- MongoDB 在你删除记录后不会在文件系统回收空间。除非你删掉数据库。但是空间没有被浪费
3、CRUD
3.1、添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
3、2 Java代码
3.2.1 控制层
package com.johnfnash.learn.mongodb.controller;
import com.johnfnash.learn.mongodb.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
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 org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private MongoTemplate mongoTemplate;
// 集合名
private static final String COLLECTION_NAME = "user";
@PostMapping("/add")
public String insert(@RequestBody User user) {
this.mongoTemplate.insert(user, COLLECTION_NAME);
return "ok";
}
@GetMapping("/list")
public List<User> query(@RequestParam(value = "dataStatus") Integer dataStatus) {
Query query = Query.query(Criteria.where("dataStatus").is(dataStatus));
List<User> users = this.mongoTemplate.find(query, User.class, COLLECTION_NAME);
return users;
}
@GetMapping("/delete")
public String delete(@RequestParam(value = "userId") String userId) {
Query query = Query.query(Criteria.where("userId").is(userId));
this.mongoTemplate.remove(query, COLLECTION_NAME);
return "ok";
}
@PostMapping("/update")
public String update(@RequestBody User user) {
Query query = Query.query(Criteria.where("userId").is(user.getUserId()));
Update update = new Update();
update.set("age", user.getAge());
update.set("name", user.getName());
update.set("email", user.getEmail());
this.mongoTemplate.updateFirst(query, update, COLLECTION_NAME);
return "ok";
}
}
3.2.2 实体类
package com.johnfnash.learn.mongodb.entity;
import java.util.Date;
public class User {
private String userId;
private String name;
private String uclass;
private String email;
private Date birthday;
private int age;
private int dataStatus;
public User() {
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUclass() {
return uclass;
}
public void setUclass(String uclass) {
this.uclass = uclass;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getDataStatus() {
return dataStatus;
}
public void setDataStatus(int dataStatus) {
this.dataStatus = dataStatus;
}
}
3.2.3 配置文件(application.properties)
spring.data.mongodb.host=127.0.0.1
spring.data.mongodb.port=27017
spring.data.mongodb.database=admin
使用postman来模拟POST请求。


380

被折叠的 条评论
为什么被折叠?



