SpringBoot 整合 MongoDB
好久没搞 SpringBoot 相关的东西勒,但最近看的代码涉及到了这部分,虽然之前没做过也能看懂,但还是从基础开始搞起比较好。
准备工作
SpringBoot 项目创建
这个本来都不用说的,SpringBoot 创建项目还能不会啊,但因为某些限制,现在用不了专业版 IDEA,只能用社区版,没法直接创建 SpringBoot 项目了,于是研究了一下怎么用社区版搭建,记录一下。
首先,创建一个新的 Maven 工程,这个在社区版中也是有的,在 pom.xml 中手动添加 SpringBoot 启动器的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starters</artifactId>
<version>2.2.13.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.3.9.RELEASE</version>
</dependency>
然后,在 resources 目录下创建 application.properties
配置文件,进行项目的一些配置,如这里将端口改为 8088:
# 更改启动端口
server.port=8088
最后,在项目最大的包下(创建的时候默认是 java/org.example
)创建主启动类,类名随意,作为 SpringBoot 的启动类,代码如下:
package org.qiyuanc;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class CloudClientApplication {
public static void main(String[] args) {
SpringApplication.run(CloudClientApplication.class, args);
}
}
这样 SpringBoot 项目就算搭建好了!再写一个 Controller 测试一下 org.qiyuanc.controller.HelloController
:
package org.qiyuanc.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController{
@RequestMapping("hello")
public String helloWorld(){
return "hello world!!!";
}
}
然后启动项目,访问 localhost:8088/hello
就可以看到信息,成功!
MongoDB
安装
本来以为安装个 MongoDB 能有什么问题,但实际操作之后也是被整晕了,所以还是记一下。
首先在官网下载 MongoDB 本体( https://www.mongodb.com/try/download/community ),这里应该没什么问题,下载 msi 版本一路安装就行(可以自定义)。但中途有个选项 Install MongoDB Compass
是安装 Mongo 的 GUI,我勾选它两次都没装上,还导致安装很慢。所以建议不勾选,后面单独装。
装完本体后(需要选择作为服务器安装),访问 http://localhost:27017/
可以看到提示:
It looks like you are trying to access MongoDB over HTTP on the native driver port.
说明安装成功。
在之前的版本中,MongoDB 是自带 MongoShell 的,即在 CMD 中输入 mongo 可以看到当前连接信息并进入 MongoShell 模式。但目前的版本(6.0+)已经不自带 MongoDB Shell 了,需要额外安装(在 MongoDB 的 bin 目录里已经没有 mongo.exe 文件了)。
在官网下载 MongoDB Shell( https://www.mongodb.com/try/download/shell ),也是选择 msi 版本(在 Platform 里选),一路确认即可。不知道为什么要分开,无语。
参考: https://www.w3cschool.cn/mongodb/mongodb_shell_install.html
最后安装 MongoDB Compass,是 MongoDB 数据库的可视化工具,官网( https://www.mongodb.com/try/download/compass ),这个没什么好说的。
安装完这三个就算齐活了,补几个 MongoDB Shell 的命令:
查看数据库:show dbs
查看集合:show collections
使用某个数据库:use 数据库名
插入数据:db.集合名.insert( { name : 'qiyuanc' } )
查询数据:db.集合名.find()
配置
进入到 admin 数据库,创建管理员
admin> db.createUser({ user: "admin", pwd:"qiyuanc", roles: [{role: "userAdminAnyDatabase", db:"admin"}]})
{ ok: 1 }
MongoDB 的用户的权限是基于 role 的,这个 admin 的 role 是 userAdminAnyDatabase
,只能用于管理账户,所以还需要创建一个 root,管理数据库:
admin> db.createUser({ user: "root", pwd:"0723", roles:[{role:"root", db:"admin"}]})
{ ok: 1 }
然后切换到实际用的数据库,创建这个数据库的拥有者账户就行了:
admin> use mongotest
switched to db mongotest
mongotest> db.createUser({ user: "qiyuan", pwd:"0723", roles:[{role:"dbOwner", db:"mongotest"}]})
{ ok: 1 }
角色 dbOwner
为这个数据库的最高权限,只要读写的话 readWrite
即可。
配置好后,就可以使用 mongodb://user:password@localhost:27017/databasename
连接到数据库了。
SpringBoot 整合 MongoDB
构建
完成准备工作,开始进行整合。首先是在创建的项目的添加 springboot-mongodb 的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version>2.4.0</version>
</dependency>
接着在 application.properties
中配置 MongoDB 的连接:
# 连接 mongo
spring.data.mongodb.uri=mongodb://qiyuan:0723@localhost:27017/mongotest
配置完成,正式写代码,创建一个实体类 User,用了 lombok,不多说:
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class User {
@Id
private String userId;
private String name;
private Integer age;
private Date createDate;
}
接着创建数据库访问层( DAO ),对于 MyBatis,会放在 mapper
包下,而对于 MongoDB 而言,一般放在 repository
包下,这里创建 UserRepository:
public interface UserRepository extends MongoRepository<User, String> {
// 无需实现
}
此处使用的方式是继承 MongoRepository
,继承了这个类后,只需要配置对应的数据类型和数据的 ID 类型,一句代码都不用写,就实现了对数据库访问层!这里多提一下 MongoRepository 的来源:
Repository:Repository 类不提供任何方法,只是一个标识,表明继承它的类是仓库接口类;
CrudRepository: 继承 Repository,实现了 CRUD 相关的方法;
PagingAndSortingRepository: 继承 CrudRepository,实现了分页排序相关的方法;
MongoRepository: 继承 PagingAndSortingRepository,实现了访问 MongoDB 相关的方法;
最后创建 Controller,给出不同功能的接口:
@RestController
@RequestMapping("/user")
public class UserRepositoryController {
@Autowired
private UserRepository userRepository;
@GetMapping("/getAllUsers")
public List<User> getAllUsers() {
return userRepository.findAll();
}
@PostMapping("/addUser")
public User addNewUser(@RequestBody User user) {
System.out.println("addUser: " + user.toString());
return userRepository.save(user);
}
}
其中的 findAll()
和 save(user)
都是 MongoRepository 帮我们实现的方法,直接用就行了!
到这,一个简单的 MongoDB 服务就搭建完成了!
访问
启动 SpringBoot 服务后,使用 Postman 请求一下接口,首先是加一个 User:
返回了这个 User 对象,说明添加成功!可以在 MongoDB Compass 中可视化的看一下(要刷新数据库!):
亲眼看到,完美!
然后测试一下获取所有 User 的接口:
没问题,舒服了。继续完善下去,一个通过 MongoDB 管理 User 的应用就完成了!
标签:SpringBoot,MongoDB,数据库,整合,mongodb,org,public From: https://www.cnblogs.com/qiyuanc/p/Back6.html