Spring Boot 整合——MongoDB整合1(MongoDB安装以及Spring Boot整合)
文章前面
关于版本
依赖 | 版本 |
---|---|
springboot | 2.0.8.RELEASE |
mongodb | 4.0.14 |
本内容只是为了介绍mongodb最基础的使用以及配置,作为一个知名的数据库,其存在相当多的高级用法,展开来介绍内容会相当多,当然本人并非相关领域的大神,下面内容只不过整理了自己日常使用的一些积累。是对自己经验的积累,也希望能帮助后来的同学
关于项目
本内容也是我尝试整理工作中接触过各种工具在springboot中使用的方法。下面介绍的所有方法都已经提供了测试用例。因为每个例子涉及代码较多,所以文章中只贴出了部分代码。全部的代码在这里:https://gitee.com/daifyutils/springboot-samples。
MongoDB
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。
关于mongodb的使用,假如并不急于马上就需要使用它做出产品的同学,可以先慢慢学习https://www.runoob.com/mongodb/mongodb-tutorial.html上面的知识。
MongoDB安装
这里主要介绍在linux上安装mongodb,当然实际中因为不同的人系统环境可能有些许差异安装的过程很难保证是正常的(比如我安装就出现了各种问题),这里CSDN中基本上可以查询出各种错误的解决方案我这里就不再介绍了,其安装主要分为下面步骤:
- 下载
- 解压
- 配置启用参数
- 创建用户
下载
可以在mongodb官方站点选择需要下载的版本的方式。
这里我选择的是mongodb-linux-x86_64-4.0.14,linux系统下使用此命令下载安装包
curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.14.tgz
解压
将文件下载到指定目录下进行解压
tar -zxvf mongodb-linux-x86_64-4.0.14.tgz
启动参数配置
需要注意此内容在学习阶段并非是必须的,你可以跳过配置直接启动mongodb,mongodb将会使用默认配置来进行启动。假如你想使用自己的配置启动mongodb则需要下面操作:
-
在mongodb根目录下创建数据库文件夹
mongodbserver
-
在mongodbserver文件夹下创建日志文件夹
创建日志文件夹
mkdir log
- 在mongodbserver文件夹下创建配置文件夹
创建配置文件夹
mkdir etc
- 在配置文件夹中创建配置
mongodb.conf
,然后修改在配置中设置此内容
# 设置数据文件的存放目录
dbpath = /usr/mongodb/mongodbserver/data
# 设置日志文件的存放目录及其日志文件名
logpath = /usr/mongodb/mongodbserver/log/mongodb.log
# 设置端口号(默认的端口号是 27017)
port = 27017
# 设置为以守护进程的方式运行,即在后台运行
fork = true
# nohttpinterface = true
nohttpinterface = true
#登录验证
#noauth=false
- 以自定义配置启用mongodb
./mongod --config /usr/local/mongodb-linux-x86_64-4.0.14/server/etc/mongodb.conf
创建用户
MongoDB将用户分为了admin用户和特定数据库用户。admin用户拥有最高的权限,而特定数据库用户则只能访问特定的数据库。而刚启动的mongodb是不存在用户的。即便–auth权限需求打开了,用户还是可以通过localhost界面进入MongoDB进行用户设置。。而当这个用户创建完成之后,之后的用户登录和操作就需要授权了。
- 使用admin数据库
> use admin
switched to db admin
- 创建管理员用户
> db.createUser({user:"admin",pwd:"admin",roles:["root"]})
Successfully added user: { "user" : "admin", "roles" : [ "root" ] }
- 登录认证
> db.auth("admin", "admin")
创建新用户
- 使用新数据库
use sample
- 创建用户并设置权限
> db.createUser({user:"sample",pwd:"admin",roles:[{ role: "readWrite", db: "sample" }]})
Successfully added user: {
"user" : "sample",
"roles" : [
{
"role" : "readWrite",
"db" : "sample"
}
]
}
MongoDB整合进Spring Boot
额外依赖
需要注意:此时是考虑已经整合进spring-boot-starter-parent
依赖的情况
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
</dependencies>
配置
此配置是使用application.yml
spring:
application:
##项目名称
name: mongodb
data:
mongodb:
## mongodb配置,因为使用了安全验证此时用mongodb://{username}:{password}@{url}:{port}/{dataName}
url: mongodb://sample:[email protected]:27017/sample
server:
port: 8000
上面配置只是其中一种可能,当然也可以设置成下面样子
spring:
application:
##项目名称
name: mongodb
data:
mongodb:
uri: mongodb://localhost/sample
port: 27017
username: sample
password: admin
server:
port: 8000
使用Spring Boot的org.springframework.data来操作MongoDB
Spring Boot针对mongodb提供了各种repository接口,提供了各种易于上手且比较强大功能。在完成mongodb数据源的配置后,我们想操作mongodb数据只需要简单的两步:
- 创建一个mongodb实体
- 为其编写一个数据访问的接口并继承
MongoRepository
创建mongodb实体
/**
* 订单配置,模拟最基础的增删查改
* @author daifeiya
*/
@Data
@Document(collection="order")
public class Order {
/**
* 文档的唯一标识
*/
@Id
private String id;
/**
* 为字段添加索引,提高针对此字段检索的效率
*/
@Indexed
private String username;
private String userLogin;
private int num;
private int createLong;
}
mongodb实体关键在于@Document
,此注解会提示Spring Boot这个类是一个mongodb实体,其对应mongodb中的一个集合(collection)。
创建一个接口并继承MongoRepository
public interface OrderItemRepository extends MongoRepository<OrderItem,String> {
}
使用此接口进行数据访问
在默认配置下,Spring会扫描所有继承了MongoRepository
的接口并认为其为数据访问的接口,根据其内置策略实现MongoRepository
内方法以及所有自定义方法。
关于自定义方法简单的说,就是根据一定规则创建的指定名称的方法会被SpringBootData按照其规则自行实现,而不需要用户自己实现。比如这个方法
Order findByIdIn(List<String> ids)
会被系统自动认为是基于ID列表做IN查询。具体此规则也是一个比较多的知识点,这里也没篇幅去细说,有兴趣的同学可以搜索:spring-data-JPA repository自定义方法规则
下面测试代码中,就可以完成对数据的操作
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = MongodbApplication.class)
public class OrderRepositoryTest {
@Autowired
OrderRepository orderRepository;
@Test
public void saveOrder() {
orderRepository.deleteAll();
Order order = new Order();
order.setId("1");
order.setUserLogin("admin");
order.setUsername("name");
order.setIndex("index");
Order save = orderRepository.save(order);
List<Order> all = orderRepository.findAll();
Assert.assertTrue(all.size() == 1);
}
}
到这里MongoDB已经被整合到Spring Boot中了,下面几篇我会介绍MongoDB在Spring Boot中的简单使用。
个人水平有限,上面的内容可能存在没有描述清楚或者错误的地方,假如开发同学发现了,请及时告知,我会第一时间修改相关内容,也希望大家看在这个新春佳节只能宅到家中埋头苦逼的码代码的情况下,能给我点一个赞。你的点赞就是我前进的动力。在这里也祝大家新春快乐。
推荐阅读
-
十、Spring boot 简单优雅的整合 Swagger2
-
Spring Boot整合WebSocket
-
spring boot整合hessian的示例
-
Spring boot配置MongoDB以及Morphia踩坑记录
-
Spring boot Mybatis整合构建Rest服务(超细版)
-
Spring Boot整合RabbitMQ开发实战详解
-
spring boot 2.0 整合 elasticsearch NoNodeAvailableException
-
Spring Boot整合静态化技术FreeMarker
-
Spring Boot(十三):整合Redis哨兵,集群模式实践
-
spring boot mybatis 整合教程