【DB系列】MongoDB之基本环境搭建与使用

文章目录
  1. I. 环境搭建
    1. 1. docker 安装
    2. 2. mongo 安装使用
  2. II. SpringBoot工程配置
    1. 1. pom依赖
    2. 2. 配置文件
    3. 3. 测试使用
    4. 4. 说明
  3. III. 其他
    1. 0. 项目
    2. 1. 一灰灰Blog
    3. 2. 声明
    4. 3. 扫描关注

SpringBoot结合mongodb进行业务开发,也属于比较基本的需求了,本文为mongo系列的基本篇,主要就是环境搭建、工程的配置设置相关

I. 环境搭建

正式开始之前,第一步就是需要安装Mongo的环境了,因为环境的安装和我们spring的主题没有太大的关系,因此我们选择最简单的使用姿势:直接用docker来安装mongo来使用

下面的安装过程都是mac环境,其他操作系统可以直接安装mongodb,移步相关教程

1. docker 安装

可以直接到官网进行下载安装,但是对系统版本有要求,所以需要使用Docker ToolBox,实际试过之后,感觉不太好用,实际上是将docker安装到虚拟机中了,下面直接使用brew命令进行安装

安装命令

1
brew cask install docker

执行完毕之后,会多一个应用名为 docker, 双击运行,输入密码等即可

2. mongo 安装使用

直接使用官方的mongo镜像即可,然后绑定端口映射,就可以在宿主机中使用mongo

1
2
3
4
5
6
7
8
9
10
11
# 下载镜像
docker pull mongo
# 加载并运行镜像
docker run --name mongo -p 27017:27017 -d mongo --auth
# 进入容器
docker exec -it d9132f1e8b26 /bin/bash
# 为mongo创建登录用户和密码
mongo
use admin
db.createUser({user:"root",pwd:"root",roles:[{role:'root',db:'admin'}]})
exit

上面完毕之后,可以在宿主机进行连接测试,判断是否安装成功

II. SpringBoot工程配置

1. pom依赖

整个框架选择的是spring-boot,所有spring这一套相关的pom配置少不了,我们主要需要注意的包就是spring-boot-starter-data-mongodb

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.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>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
<java.version>1.8</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.45</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</pluginManagement>
</build>

<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>

2. 配置文件

配置文件如下,主要就是连接mongo的url

1
spring.data.mongodb.uri=mongodb://root:root@localhost:27017/basic?authSource=admin&authMechanism=SCRAM-SHA-1

通过上面的实例,也知道格式如下:

mongodb://用户名:密码@host:port/dbNmae?参数

  • 当没有用户名和密码时,可以省略掉中间的 root:root@
  • 当需要认证时,请格外注意
    • mongodb新版的验证方式改成了SCRAM-SHA-1,所以参数中一定一定一定得加上
      • ?authSource=admin&authMechanism=SCRAM-SHA-1
    • 如果将mongodb的验证方式改成了MONGODB-CR, 则上面的可以不需要

3. 测试使用

写一个简单的测试类,看下mongodb是否连接成功,是否可以正常操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
@Slf4j
@Component
public class MongoTemplateHelper {

@Getter
@Setter
private MongoTemplate mongoTemplate;

public MongoTemplateHelper(MongoTemplate mongoTemplate) {
this.mongoTemplate = mongoTemplate;
}



/**
* 保存记录
*
* @param params
* @param collectionName
*/
public void saveRecord(Map<String, Object> params, String collectionName) {
mongoTemplate.save(params, collectionName);
}

/**
* 精确查询方式
*
* @param query
* @param collectionName
*/
public void queryRecord(Map<String, Object> query, String collectionName) {
Criteria criteria = null;
for (Map.Entry<String, Object> entry : query.entrySet()) {
if (criteria == null) {
criteria = Criteria.where(entry.getKey()).is(entry.getValue());
} else {
criteria.and(entry.getKey()).is(entry.getValue());
}
}

Query q = new Query(criteria);
Map result = mongoTemplate.findOne(q, Map.class, collectionName);
log.info("{}", result);
}
}

上面提供了两个方法,新增和查询,简单的使用姿势如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@SpringBootApplication
public class Application {

private static final String COLLECTION_NAME = "personal_info";


public Application(MongoTemplateHelper mongoTemplateHelper) {
Map<String, Object> records = new HashMap<>(4);
records.put("name", "小灰灰Blog");
records.put("github", "https://github.com/liuyueyi");
records.put("time", LocalDateTime.now());

mongoTemplateHelper.saveRecord(records, COLLECTION_NAME);

Map<String, Object> query = new HashMap<>(4);
query.put("name", "小灰灰Blog");
mongoTemplateHelper.queryRecord(query, COLLECTION_NAME);
}

public static void main(String[] args) {
SpringApplication.run(Application.class);
}

}

然后开始执行,查看输出,结果演示如下

gif.gif

4. 说明

最后针对认证的问题,需要额外提一句,开始测试的时候,使用的配置如下

1
2
3
4
5
spring.data.mongodb.username=root
spring.data.mongodb.password=root
spring.data.mongodb.authentication-database=basic
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017

然而因为mongo采用的是SHA-1加密方式,所以始终验证不通过;然后查了一下,各种让改mongo的验证版本,改回去用CR的方式;但明显这种并不是一种好的解决方式,既然新的版本选择了新的加密方式,总有他的理由,所以应该改的还是spring的使用姿势;目前还没找到匹配上面这种配置方式的解决方案;

本文选择的是用url的方式指定加密方式来解决这个问题,当然研究下后面这种方式内部实现,应该就能知道前面的可以怎么解决,这点记下来,后续再开坑填

III. 其他

0. 项目

1. 一灰灰Blog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

3. 扫描关注

一灰灰blog

QrCode

知识星球

goals


打赏 如果觉得我的文章对您有帮助,请随意打赏。
分享到