前言:
MongoDB是专为可扩展性,高性能和高可用性而设计的数据库。它可以从单服务器部署扩展到大型、复杂的多数据中心架构。利用内存计算的优势,MongoDB能够提供高性能的数据读写操作。 MongoDB的本地复制和自动故障转移功能使您的应用程序具有企业级的可靠性和操作灵活性。
具体介绍请访问MongoDB中文手册|官方文档中文版 - MongoDB-CN-Manual (mongoing.com)
前提准备:
1.安装MongoDB
安装完mongoDB之后,进入到对应的bin目录下,在bin目录中启动cmd
输入mongo.exe即可启动命名行
2.创建权限用户
#查看数据库
show database;
#选择数据库
use admin;
#在admin数据库中创建权限用户
db.createUser({user:"root",pwd:"123456",roles:[{role:"readWriteAnyDatabase",db:"admin"}]})
命令操作:(建议提前熟悉再进行SpringBoot整合MongoDB)
MongoDB 教程 | 菜鸟教程 (runoob.com)
具体操作:
1.导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version>2.3.12.RELEASE</version>
</dependency>
2.编写实体类
// @Data需要导入lombok依赖包
@Data
public class Student {
private String id;
private String name;
private Integer age;
}
3.编写接口
/**
* 通过继承MongoRepository实现MongoDB的CURD操作
* 指定两个泛型:操作的实体类类型 和 主键的类型
*/
public interface StudentDao extends MongoRepository<Student, String> {
}
4.进行MongoDB配置(基于.yml文件)
spring:
data:
mongodb:
# 如果在MongoDB中创建了用户,抛出认证失败错误
# UncategorizedMongoDbException: Exception authenticating MongoCredential
# 则将密码加上“”
username: root
password: "123456"
# 认证的库
authentication-database: admin
# 默认端口号
port: 27017
# 本机地址
host: 127.0.0.1
# 所需测试的数据库
database: test
5.进行测试
// classes 指定启动类
@SpringBootTest(classes = SpringBootApplcationMongoDB.class)
public class StudentDaoTest {
@Resource
StudentDao studentDao;
@Resource
MongoTemplate mongoTemplate;
@Test
public void test{
for (int i = 0; i < 10; i++) {
Student student = new Student();
student.setName("张三" + i);
student.setAge(18 + i);
studentDao.save(student);
}
// 如果只是简单的增删改查 建议使用继承了MongoRepository的StudentDao
studentDao.findAll(Sort.by(Sort.Direction.DESC , "age")).forEach(student -> {
System.out.println("findAll ====》》》 " + student);
});
// 如果出现较为复杂的CURD操作,建议使用MongoTemplate 进行条件查询等复杂操作
Query query = new Query();
// 添加条件为 age is 22
query.addCriteria(Criteria.where("age").is(22));
System.out.println("findOne(query , Student.class) ====》》》 " + mongoTemplate.findOne(query, Student.class));
// 添加模糊查询 name regex "王"
Query query1 = new Query();
query1.addCriteria(Criteria.where("name").regex("王"));
// 还可以排除不需要显示的列字段 fields().exclude()
query1.fields().exclude("age");
System.out.println("mongoTemplate.find(query, Student.class) = " + mongoTemplate.find(query , Student.class));
}