首页 > 数据库 >SpringBoot 整合 MongoDB

SpringBoot 整合 MongoDB

时间:2023-04-14 16:22:18浏览次数:49  
标签:SpringBoot MongoDB 数据库 整合 mongodb org public

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:

img

返回了这个 User 对象,说明添加成功!可以在 MongoDB Compass 中可视化的看一下(要刷新数据库!):

img

亲眼看到,完美!

然后测试一下获取所有 User 的接口:

img

没问题,舒服了。继续完善下去,一个通过 MongoDB 管理 User 的应用就完成了!

标签:SpringBoot,MongoDB,数据库,整合,mongodb,org,public
From: https://www.cnblogs.com/qiyuanc/p/Back6.html

相关文章

  • springboot打成jar包resources下文件的获取
    importorg.apache.poi.util.IOUtils;importorg.springframework.boot.system.ApplicationHome;importorg.springframework.core.io.ClassPathResource;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream......
  • Springboot集成MongoDB存储文件、读取文件
    一、前言和开发环境及配置可以转载,但请注明出处。  之前自己写的SpringBoot整合MongoDB的聚合查询操作,感兴趣的可以点击查阅。https://www.cnblogs.com/zaoyu/p/springboot-mongodb.html 使用mongodb存储文件并实现读取,通过springboot集成mongodb操作。 可以有两种实现......
  • mongodb 获取集合所有记录中曾出现过的字段
    switchtothedbyou'reusingandtype:mr=db.runCommand({"mapreduce":"myCollectionName","map":function(){for(varkeyinthis){emit(key,null);}},"reduce":function(key,stuff){ret......
  • springboot-web-mybatis
    Restful开发规范Restful是网络应用接口程序的接口设计风格,基于HTTP协议GET:查询POST:新增PUT:修改DELETE:删除Restful是一种风格,可以不遵守如何为请求参数设置默认值可以在Service层判断是否为null,如果为true则给它赋值默认值可以在Controller层参数列表添加@RequstPa......
  • Java SpringBoot 中,动态执行 bean 对象中的方法
    根据不同的条件,调用不同的bean对象,执行对象中的方法SpringUtils工具类packagecom.vipsoft.web.utils;importcn.hutool.core.util.ArrayUtil;importorg.springframework.aop.framework.AopContext;importorg.springframework.beans.BeansException;importorg.sprin......
  • 【Python】pandas 将某列相同值作为index, 整合数据
    pd.pivot_table#dfvalueUpdateTimefactorNamevalue02023-03-2808:00:18.532805风向147.6912023-03-2808:00:18.532805气压101.7122023-03-2808:00:18.532805风速0.2832023-03-2808:00:18.5328......
  • SpringBoot 集成 MybatisPlus 八——插件
    1Mybatis插件机制Mybatis插件是对Executor、StatementHandler、ParameterHandler、ResultSetHandler这四个接口上的方法进行拦截,利用JDK动态代理机制,为这些接口的实现类创建代理对象,在执行方法时,先去执行代理对象的方法,从而执行自己编写的拦截逻辑。ExecutorMyBatis的内部执行器......
  • java 处理常量字符串过长 & springboot 项目读取 resouces 文件夹下的文件内容
    长字符串起因项目里面有一长串的加密字符串(最长的万多个字符),需要拼接作为参数发送给第三方。如果我们使用枚举定义的话,idea编译的时候就会出现编译报错Error:java:常量字符串过长解决想法网上还有一个说法,说是编译器问题,修改idea工具的编译为eclipse即可......
  • SpringBoot 自定义对象映射器的使用
    SpringBoot底层默认使用Jackson进行Java实体对象与Json之间的转换,有时转换的效果并不是我们所期望的,需要进行额外的处理工作,有经验的小伙伴们,肯定遇到过下面两种典型的情况:当对象的属性是日期类型时,转换成json后的结果并不是我们想要的效果,还需要我们额外进行显示格式......
  • springboot学习之四(整和mybatis)
    springboot整和mybatis    1.mapper文件开发 2.纯注解开发    https://www.cnblogs.com/fps2tao/p/13821490.html ......