MongoDB是为现代应用程序开发人员和云时代构建的基于文档的通用分布式数据库。MongoDB是一个文档数据库,这意味着它将数据存储在类似JSON的文档中。MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
一、Windows下安装MongoDB
下载地址:https://www.mongodb.com/dr/fastdl.mongodb.org/win32/mongodb-win32-x86_64-2012plus-4.2.5-signed.msi/download
安装好了之后,咱们可以通过Windows服务启动MongoDB,如下图:
可以看到可执行文件的路径是D:\MongoDB\Server\4.2\bin\mongod.exe --dbpath D:\MongoDB\Server\4.2\data --logpath D:\MongoDB\Server\4.2\log\log.log --logappend --auth --service
–auth是说明访问MongoDB是需要认证信息的。
所以,我们先卸载掉MongoDB服务,去掉这个认证限制,便于我们创建一个管理员帐号。首先以管理员身份运行如下命令:mongod.exe --remove --serviceName "MongoDB"
,然后再执行:mongod.exe --dbpath D:\MongoDB\Server\4.2\data --logpath D:\MongoDB\Server\4.2\log\log.log --logappend --install
,如下图:
然后,我们手动启动服务即可。
接下来,我们使用MongoDB命令行来创建一个管理员用户。
首先,找到MongoDB安装目录的bin目录,双击mongo.exe即可,然后先执行use admin
,再执行:
db.createUser({
user: 'myAdmin', // 用户名
pwd: '123456', // 密码
roles:[{
role: 'root', // 角色
db: 'admin' // 数据库
}]
})
如下图:
这样,我们的管理员账号就创建好了,我们重新卸载服务和安装服务,只是加上–auth即可,命令如下:
mongod.exe --remove --serviceName "MongoDB"
mongod.exe --dbpath D:\MongoDB\Server\4.2\data --logpath D:\MongoDB\Server\4.2\log\log.log --logappend --auth --install
二、如何创建数据库
然后,我们再用客户端连接到MongDB,双击bin目录下的mongo.exe即可。
接下来,我们创建一个普通用户,方便我们操作数据库,命令如下:
db.createUser({
user: 'qyk', // 用户名
pwd: '123456', // 密码
roles:[{
role: 'readWrite', // 角色
db: 'admin' // 数据库
}]
})
在执行这个命令前,我们要先执行user admin
和db.auth('admin', '123456')
进行认证,不然就无法创建了,会提示权限问题。
关于role的类型,有很多,如下:
- 数据库用户角色:read、readWrite
- 数据库管理角色:dbAdmin、dbOwner、userAdmin
- 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
- 备份恢复角色:backup、restore
- 所有数据库角色: readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、
dbAdminAnyDatabase - 超级用户角色:root
然后,我们再执行use myTestDB
,再执行:
db.createUser({
user: 'qyk', // 用户名
pwd: '123456', // 密码
roles:[{
role: 'readWrite', // 角色
db: 'myTestDB' // 数据库
}]
})
赋予qyk这个用户myTestDB库的读写权限。
好了到此,用户和数据都创建好了
三、可视化工具Robo 3T的安装
下载地址:https://robomongo.org/
MongoDB的可视化工具还是挺多的,这里小七就给大家推荐一下Robo 3T。安装好了之后,咱们就可以连接到MongoDB服务器了,如下图:
好了,关于MongoDB的一些基本操作,小七就不介绍了,大家可以自己到官网看一下。
四、Spring Boot中集成MongoDB
我们只需要在pom.xml中加上如下依赖即可:
<!-- MongoDB -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
五、Spring Boot中使用MongoDB
首先,我们我看下.yml配置文件中如何配置连接到MongoDB,如下:
spring:
data:
mongodb:
uri: mongodb://qyk:123456@localhost:27017/myTestDB
接下来,我们来写一个基于MongoDB的增删改查类,UserRepository.java接口类如下:
package org.qyk.springboot.mongodb;
import org.qyk.springboot.vo.User;
/**
-
@version 1.0
-
Author Date Changes
-
yongkang.qi 2020年04月30日 Created
-
@since 1.7
*/
public interface UserRepository {void saveUser(User user);
User findUserByUserName(String userName);
long updateUser(User user);
void deleteUserById(Long id);
}
UserRepositoryImpl.java实现类,如下:
package org.qyk.springboot.mongodb.impl;
import org.qyk.springboot.mongodb.UserRepository;
import org.qyk.springboot.vo.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.stereotype.Component;
import com.mongodb.client.result.UpdateResult;
/**
* <Change to the actual description of this class>
*
* @version 1.0
*
* <pre>
* Author Date Changes
* yongkang.qi 2020年04月30日 Created
* </pre>
*
* @since 1.7
*/
@Component
public class UserRepositoryImpl implements UserRepository {
private String COLLECTION_NAME = "userInfo";
@Autowired
private MongoTemplate mongoTemplate;
/**
* 创建对象
*
* @param user
*/
@Override
public void saveUser(User user) {
mongoTemplate.save(user, COLLECTION_NAME);
}
/**
* 根据用户名查询对象
*
* @param userName
* @return
*/
@Override
public User findUserByUserName(String userName) {
Query query = new Query(Criteria.where("userName").is(userName));
User user = mongoTemplate.findOne(query, User.class, COLLECTION_NAME);
return user;
}
/**
* 更新对象
*
* @param user
*/
@Override
public long updateUser(User user) {
Query query = new Query(Criteria.where("id").is(user.getId()));
Update update = new Update()
.set("userName", user.getUserName())
.set("password", user.getPassword())
.set("age", user.getAge())
.set("birth", user.getBirth());
// 更新查询返回结果集的第一条
UpdateResult result = mongoTemplate.updateFirst(query, update, User.class, COLLECTION_NAME);
// 更新查询返回结果集的所有
// mongoTemplate.updateMulti(query,update,UserEntity.class);
if (result != null) {
return result.getMatchedCount();
} else {
return 0;
}
}
/**
* 删除对象
*
* @param id
*/
@Override
public void deleteUserById(Long id) {
Query query = new Query(Criteria.where("id").is(id));
mongoTemplate.remove(query, User.class, COLLECTION_NAME);
}
}
User.java:
package org.qyk.springboot.vo;
import java.util.Date;
/**
* <Change to the actual description of this class>
*
* @version 1.0
* <pre>
* Author Date Changes
* yongkang.qi 2020年03月22日 Created
*
* </pre>
* @since 1.7
*/
public class User {
private Long id;
private String userName;
private String password;
private Integer age;
private Date birth;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
}
可以看出,使用MongoDB,只要注入MongoTemplate 即可,这个类提供MongoDB的基本操作。
下面,我们来创建一下单元测试类UserRepositoryTest.java,如下:
package org.qyk.springboot.mongodb;
import com.alibaba.fastjson.JSON;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.qyk.springboot.vo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Date;
/**
* <Change to the actual description of this class>
*
* @version 1.0
* <pre>
* Author Date Changes
* yongkang.qi 2020年04月30日 Created
*
* </pre>
* @since 1.7
*/
@SpringBootTest
@RunWith(SpringRunner.class)
class UserRepositoryTest {
@Autowired
private UserRepository userRepository;
@Test
void testSaveUser() {
User user = new User();
user.setId(1L);
user.setUserName("qyk01");
user.setPassword("1234567");
user.setAge(18);
user.setBirth(new Date());
userRepository.saveUser(user);
}
@Test
void testFindUserByUserName() {
User user = userRepository.findUserByUserName("qyk01");
System.out.println("user:" + JSON.toJSONString(user));
}
@Test
void testUpdateUser() {
User user = new User();
user.setId(1L);
user.setAge(1);
user.setPassword("11111");
userRepository.updateUser(user);
}
@Test
void testDeleteUserById() {
userRepository.deleteUserById(1L);
}
}
我们先运行testSaveUser看一下,如下图:
可以看到运行成功了,我们先通过可视化工具看一下,如下图:
说明数据保存成功了,接下来,我们再testFindUserByUserName看看,如下图:
好了,小七演示到这儿了,剩下的更新、删除等操作,大家也可以自己试试了。
今天小七只是大致介绍了一下如何在SpringBoot中如何使用MongoDB,关于MongoDB更高级的使用,大家可以自己可以研究研究,小七也得去了解一下~