Springboot整合MongoDB进行CRUD操作的两种方式(实例代码详解)

1 简介

Springboot是最简单的使用Spring的方式,而MongoDB是最流行的NoSQL数据库。两者在分布式、微服务架构中使用率极高,本文将用实例介绍如何在Springboot中整合MongoDB的两种方法:MongoRepositoryMongoTemplate

代码结构如下:

2 项目准备

2.1 启动MongoDB实例

为了方便,使用Docker来启动MongoDB,详细指导文档请参考:基于Docker的MongoDB实现授权访问的方法,这里不再赘述。

2.2 引入相关依赖

主要的依赖为WebMongoDBstarter,把下面代码加入到pom.xml中即可:

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
</dependency>

2.3 配置数据库连接信息

与配置MySQLOracle一样,MongoDB也需要配置连接信息,配置在application.properties中如下:

server.port=8080

spring.data.mongodb.authentication-database=admin
spring.data.mongodb.database=testdb
spring.data.mongodb.username=user
spring.data.mongodb.password=123456
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017

2.4 创建数据模型实体

创建User类如下:

package com.pkslow.mongo.model;

import org.springframework.data.annotation.Id;
import java.util.Date;

public class User {
 @Id
 private String userId;
 private String name;
 private Integer age;
 private Date createTime = new Date();

 public String getUserId() {
 return userId;
 }

 public void setUserId(String userId) {
 this.userId = userId;
 }

 public String getName() {
 return name;
 }

 public void setName(String name) {
 this.name = name;
 }

 public Integer getAge() {
 return age;
 }

 public void setAge(Integer age) {
 this.age = age;
 }

 public Date getCreateTime() {
 return createTime;
 }

 public void setCreateTime(Date createTime) {
 this.createTime = createTime;
 }
}

不需要在MongoDB中创建对应的Collections(表),当通过Web应用新增时会自动创建。

3 方式1:MongoRepository

3.1 定义数据访问层UserRepository

使用过Spring Jpa的都清楚,Repository实际就是用于操作数据库的类。在非关系型数据库MongoDB的整合中,也是一样的。Spring会帮我们实现好对应接口的方法,开发人员连SQL都不用写,非常省心。代码如下:

package com.pkslow.mongo.dal;

import com.pkslow.mongo.model.User;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends MongoRepository<User, String> {
}

注意MongoRepository后面接的泛型<User, String>第一个为实体类,第二个为主键ID

3.2 实现Controller

Controller比较基础,就不讲解了,常用的注解是必须要掌握的,直接上代码吧:

package com.pkslow.mongo.contrlloer;

import com.pkslow.mongo.dal.UserRepository;
import com.pkslow.mongo.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {
 @Autowired
 private final UserRepository userRepository;

 public UserController(UserRepository userRepository) {
 this.userRepository = userRepository;
 }

 @GetMapping("")
 public List<User> getAllUsers() {
 return userRepository.findAll();
 }

 @GetMapping("/{userId}")
 public User getByUserId(@PathVariable String userId) {
 return userRepository.findById(userId).orElse(new User());
 }

 @PostMapping("")
 public User addNewUser(@RequestBody User user) {
 return userRepository.save(user);
 }

 @DeleteMapping("/{userId}")
 public String delete(@PathVariable String userId) {
 User user = new User();
 user.setUserId(userId);
 userRepository.deleteById(userId);
 return "deleted: " + userId;
 }

 @PutMapping("")
 public User update(@RequestBody User user) {
 return userRepository.save(user);
 }
}

注意代码没有做异常情况的判断和处理,这里为了快速演示,就先不管了。

3.3 测试

Postman测试后,每个接口均调用成功。就不一一截图了。

4 方式2:MongoTemplate

4.1 定义数据访问层UserDAL

先定义接口为:

package com.pkslow.mongo.dal;

import com.pkslow.mongo.model.User;
import java.util.List;

public interface UserDAL {
 List<User> findAll();

 User findById(String userId);

 User save(User user);

 void deleteById(String userId);
}

然后实现该接口如下:

package com.pkslow.mongo.dal;

import com.pkslow.mongo.model.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.stereotype.Repository;
import java.util.List;

@Repository
public class UserDALImpl implements UserDAL {

 @Autowired
 private MongoTemplate template;

 @Override
 public List<User> findAll() {
 return template.findAll(User.class);
 }

 @Override
 public User findById(String userId) {
 return template.findById(userId,User.class);
 }

 @Override
 public User save(User user) {
 return template.save(user);
 }

 @Override
 public void deleteById(String userId) {
 Query query = new Query();
 query.addCriteria(Criteria.where("userId").is(userId));
 template.remove(query, User.class);
 }
}

4.2 实现另一个Controller

这个Controller的代码与之前的基本一样,只是数据访问类不一样,代码如下:

package com.pkslow.mongo.contrlloer;

import com.pkslow.mongo.dal.UserDAL;
import com.pkslow.mongo.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/userTemplate")
public class UserTemplateController {

 @Autowired
 private final UserDAL userDAL;

 public UserTemplateController(UserDAL userDAL) {
 this.userDAL = userDAL;
 }

 @GetMapping("")
 public List<User> getAllUsers() {
 return userDAL.findAll();
 }

 @GetMapping("/{userId}")
 public User getByUserId(@PathVariable String userId) {
 return userDAL.findById(userId);
 }

 @PostMapping("")
 public User addNewUser(@RequestBody User user) {
 return userDAL.save(user);
 }

 @DeleteMapping("/{userId}")
 public String delete(@PathVariable String userId) {
 User user = new User();
 user.setUserId(userId);
 userDAL.deleteById(userId);
 return "deleted: " + userId;
 }

 @PutMapping("")
 public User update(@RequestBody User user) {
 return userDAL.save(user);
 }
}

4.3 测试

测试一样也是全部通过:

5 总结

本文通过实例讲解了如何整合SpringbootMongoDB,主要有两种方法:MongoRepositoryMongoTemplate。代码基本在文章中已经贴出来了,需要的可以下载源代码。

链接: https://pan.baidu.com/s/1bSu4rIkK4f7UIIWW_fZT7A 提取码: 2uei

到此这篇关于Springboot整合MongoDB进行CRUD操作的两种方式的文章就介绍到这了,更多相关Springboot整合MongoDB crud 操作内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • spring boot整合scurity做简单的登录校验的实现

    开发环境:springboot maven引入: <dependency> <groupId>org.springframework.security.oauth</groupId> <artifactId>spring-security-oauth2</artifactId> <version>2.2.1.RELEASE</version> </dependency> <dependency> &

  • SpringBoot如何通过yml方式整合Mybatis

    本来打算写个使用Sharding-JDBC的例程,但是在搭建Mybatis的过程中,一波三折,因为好久没搭建项目了,另外加上换了电脑.所以很破折,在这里记录一下Spring Boot整合Mybatis吧.可能很简单,但是我长时间没用忘记了,我这里备忘一下吧. 一.项目目录结构 注意这里Application文件的位置,它是与controller.entity.mapper.service等包处于并列的关系. 二.数据库文件 SET NAMES utf8mb4; SET FOREIGN_KEY_C

  • SpringBoot整合MyCat实现读写分离的方法

    MyCat一个彻底开源的,面向企业应用开发的大数据库集群.基于阿里开源的Cobar产品而研发.能满足数据库数据大量存储:提高了查询性能.文章介绍如何实现MyCat连接MySQL实现主从分离,并集成SpringBoot实现读写分离. MySQL配置主从关系 说明 192.168.0.105 Linux 数据库作为主master数据库 127.0.0.1 Window 作为从slave数据库 master主数据库配置 binlog是Mysql sever层维护的一种二进制日志,主要是用来记录对Mys

  • SpringBoot整合FastDFS方法过程详解

    一.pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM

  • Springboot以Repository方式整合Redis的方法

    1 简介 Redis是高性能的NoSQL数据库,经常作为缓存流行于各大互联网架构中.本文将介绍如何在Springboot中整合Spring Data Redis,使用Repository的方式操作. 代码结构如下: 2 整合过程 2.1 安装Redis数据库 为了节省时间,就直接通过Docker来安装了,可以参考文章:Docker安装Redis并介绍漂亮的可视化客户端进行操作,可以快速安装并使用客户端进行查看和操作. 2.2 引入相关依赖 我们引入Springboot Web的依赖,以启动RES

  • Springboot整合junit过程解析

    对maven项目的pom.xml进行配置 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <!--junit5不需要配置junit-vintage-engine--> &

  • Springboot整合Gson报错问题解决过程

    在Springboot 中依赖Gson,项目启动时报错: *************************** APPLICATION FAILED TO START *************************** Description: An attempt was made to call a method that does not exist. The attempt was made from the following location: java.lang.invoke

  • Springboot整合MongoDB进行CRUD操作的两种方式(实例代码详解)

    1 简介 Springboot是最简单的使用Spring的方式,而MongoDB是最流行的NoSQL数据库.两者在分布式.微服务架构中使用率极高,本文将用实例介绍如何在Springboot中整合MongoDB的两种方法:MongoRepository和MongoTemplate. 代码结构如下: 2 项目准备 2.1 启动MongoDB实例 为了方便,使用Docker来启动MongoDB,详细指导文档请参考:基于Docker的MongoDB实现授权访问的方法,这里不再赘述. 2.2 引入相关依赖

  • 使用Python将图片转正方形的两种方法实例代码详解

    一.将原图粘贴到一张正方形的背景上 def trans_square(image): r"""Open the image using PIL.""" image = image.convert('RGB') w, h = image.size background = Image.new('RGB', size=(max(w, h), max(w, h)), color=(127, 127, 127)) # 创建背景图,颜色值为127 leng

  • SpringBoot EasyPoi动态导入导出的两种方式实现方法详解

    目录 前言 一.基于@Excel的 isColumnHidden 属性 1.1 实现原理 1.2 实现步骤 1.3 实现效果 二. 基于List< ExcelExportEntity > 的导出 实现效果 总结 前言 一开始为了图方便,使用的是土方法,即创建多个不同的实体类,每个实体类对应不同的列.这样虽说能实现,但实在不想多复制实体类,把代码堆的和shi山一样.于是查看官方文档,里面确实提供了更加优雅的实现方式.废话不多说,开整. 一.基于@Excel的 isColumnHidden 属性

  • Spring依赖注入(DI)两种方式的示例详解

    目录 一.依赖注入方式 二.setter注入 引用类型 简单类型 三.构造器注入 引用类型 简单类型 参数适配(了解) 四.依赖注入方式选择 一.依赖注入方式 思考:向一个类中传递数据的方式有几种? 普通方法(set方法) 构造方法 思考:依赖注入描述了在容器中建立bean与bean之间依赖关系的过程,如果bean运行需要的是数字或字符串呢? 引用类型 简单类型(基本数据类型与String) 依赖注入方式: setter注入 简单类型 引用类型 构造器注入 简单类型 引用类型 二.setter注

  • MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)

    一.mybatis批量插入数据到Oracle中的两种方式: 第一种: <insert id="addList" parameterType="java.util.List" useGeneratedKeys="false"> INSERT ALL <foreach item="item" index="index" collection="list"> INTO

  • 详解Springboot整合ActiveMQ(Queue和Topic两种模式)

    写在前面: 从2018年底开始学习SpringBoot,也用SpringBoot写过一些项目.这里对学习Springboot的一些知识总结记录一下.如果你也在学习SpringBoot,可以关注我,一起学习,一起进步. ActiveMQ简介 1.ActiveMQ简介 Apache ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件:由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行. 2.ActiveMQ下载 下载地址:htt

  • springboot 注册服务注册中心(zk)的两种方式详解

    在使用springboot进行开发的过程中,我们经常需要处理这样的场景:在服务启动的时候,需要向服务注册中心(例如zk)注册服务状态,以便当服务状态改变的时候,可以故障摘除和负载均衡. 我遇到过两种注册的途径: 1.在Spring的webapplication启动完成后,直接进行注册: 2.在servlet容器启动完成后,通过listener进行注册. 本文通过一个demo讲述一下这两种注册方式,使用的是传统的向zk注册的方案. 1.Spring webapplication启动完成后注册 先上

  • MySQL两种临时表的用法详解

    外部临时表 通过CREATE TEMPORARY TABLE 创建的临时表,这种临时表称为外部临时表.这种临时表只对当前用户可见,当前会话结束的时候,该临时表会自动关闭.这种临时表的命名与非临时表可以同名(同名后非临时表将对当前会话不可见,直到临时表被删除). 内部临时表 内部临时表是一种特殊轻量级的临时表,用来进行性能优化.这种临时表会被MySQL自动创建并用来存储某些操作的中间结果.这些操作可能包括在优化阶段或者执行阶段.这种内部表对用户来说是不可见的,但是通过EXPLAIN或者SHOW S

  • Spring加载properties文件的两种方式实例详解

    在项目中如果有些参数经常需要修改,或者后期可能需要修改,那我们最好把这些参数放到properties文件中,源代码中读取properties里面的配置,这样后期只需要改动properties文件即可,不需要修改源代码,这样更加方便.在Spring中也可以这么做,而且Spring有两种加载properties文件的方式:基于xml方式和基于注解方式.下面分别讨论下这两种方式. 1. 通过xml方式加载properties文件 我们以Spring实例化dataSource为例,我们一般会在beans

  • java 实现websocket的两种方式实例详解

    一.介绍 1.两种方式,一种使用tomcat的websocket实现,一种使用spring的websocket 2.tomcat的方式需要tomcat 7.x,JEE7的支持. 3.spring与websocket整合需要spring 4.x,并且使用了socketjs,对不支持websocket的浏览器可以模拟websocket使用 二.方式一:tomcat 使用这种方式无需别的任何配置,只需服务端一个处理类, 服务器端代码 package com.Socket; import java.io

随机推荐