Spring Boot 整合 MongoDB
MongoDB 是一个基于分布式文件存储的数据库,它是一个介于关系数据库和非关系数据库之间的产品,其主要以 key、value 方式存储数据;其支持的数据结构非常松散,是类似 JSON 的 BJSON 格式,因此其存储数据非常灵活。随着近几年软件行业的蓬勃发展,用户的需求、业务的多样化,引发了软件系统自身数据的多样化,从而使 MongoDB 成为 NoSQL 数据库中的皎皎者。
传统关系数据库主要由数据库、表、记录三个层次概念组成,而 MongoDB 是由数据库、集合、文档三个层次组成。MongoDB 相对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了其存储数据非常灵活的特点。
MongoDB 适合对大量或者无固定格式的数据进行存储,如日志、缓存等。对事物支持较弱,不适用于复杂的多集合的级联查询。
CentOS 7安装 MongoDB
1. 新建目录 /usr/local/software/
,
执行命令 curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.12.tgz
下载安装文件;
2. 执行命令解压:tar -zxvf mongodb-linux-x86_64-3.2.12.tgz
;
3. 将解压后文件移动到指定目录:mv mongodb-linux-x86_64-3.2.12/ /usr/local/mongodb
;
4. 接着,执行命令:mkdir -p /data/db /logs
;
5. 执行命令 cd bin
,新建配置文件 vim mongodb.conf
并添加如下内容之后保存:
dbpath = /data/db #数据文件存放目录
logpath = /logs/mongodb.log #日志文件存放目录
port = 27017 #端口
fork = true #以守护程序的方式启用,即在后台运行
nohttpinterface = true
auth=false
bind_ip=0.0.0.0
6. 修改环境变量:vi /etc/profile
:
export MONGODB_HOME=/usr/local/mongodb
export PATH=$PATH:$MONGODB_HOME/bin
保存后,重启系统配置:source /etc/profile
。
7. 进入目录 /usr/local/mongodb/bin
,启动 mongod -f mongodb.conf
;
8. 执行命令./mongo
;
9. 执行命令创建数据库 use students
,并添加用户:db.createUser({user:"root",pwd:"123456",roles:[{role:"readWrite",db:"students"}]})
。
下面接着演示在工作中如何将 Spring Boot 和 MongoDB 进行整合。
1. 在 pom 文件中添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
2. 在 application.yml 配置文件中添加 MongoDB 访问配置信息:
spring:
data:
mongodb:
uri: mongodb://******/students
3. 当前利用 Spring Boot 操作 MongoDB 比较常用的两种方式分别为:直接在 Dao 中注入 MongoTemplate 对象,及继承 MongoRepository。由于利用继承MongoRepository的方式和我们之前继承 JpaRepository 操作数据库非常类似。本文中将为大家演示如何利用 MongoTemplate 操作 MongoDB。
添加学生数据实体:
public class Student {
private String id;
private String studentName;
private Integer age;
public Student(){}
public Student(String id, String studentName, Integer age) {
this.id = id;
this.studentName = studentName;
this.age = age;
}
public String getId() {
return id;
}
public void setSid(String id) {
this.id = id;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
定义添加、删除、查询、修改学生信息接口:
public interface IStudentService {
/**
* 新增学生信息
* @param student
*/
void addStudent(Student student);
/**
* 删除学生信息
* @param id
*/
void deleteStudentByIs(String id);
/**
* 根据主键查询学生信息
* @param id
* @return
*/
Student findById(String id);
/**
* 根据学生姓名查询学生信息
* @param studentName
* @return
*/
Student findStudentByStudentName(String studentName);
/**
* 更新学生信息
* @param student
*/
void updateStudentInfo(Student student);
}
定义添加、删除、查询、修改学生信息接口实现类:
@Service("stdentService")
public class StudentServiceImpl implements IStudentService {
@Autowired
private MongoTemplate mongoTemplate;
@Override
public void addStudent(Student student) {
mongoTemplate.save(student);
}
@Override
public void deleteStudentById(String id) {
Query query = new Query(Criteria.where("id").is(id));
mongoTemplate.remove(query, Student.class);
}
@Override
public Student findById(String id) {
return mongoTemplate.findById(id, Student.class);
}
@Override
public Student findStudentByStudentName(String studentName) {