Springboot+MongoDB的五种操作方式

 更新时间:2025年07月28日 09:18:34   作者:moxiaoran5753  
本文主要介绍了Springboot+MongoDB的五种操作方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、maven中添加依赖

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

二、配置文件中添加连接

spring:
    mongodb:
      host: 192.168.56.10
      port: 27017
      database: share #指定操作的数据库

三、创建mongodb文档对应的实体类

@Data
@Schema(description = "站点位置")
public class StationLocation
{

    @Schema(description = "id")
    @Id
    private String id;

    @Schema(description = "站点id")
    private Long stationId;

    @Schema(description = "经纬度")
    private GeoJsonPoint location;

    @Schema(description = "创建时间")
    private Date createTime;
}

四、操作MongoDB数据库

Springboot提供了5种操作MongoDB的方式,下面简单介绍下它们的使用方法:

4.1 MongoTemplate

特点

  • 是 Spring Data MongoDB 提供的核心模板类
  • 提供丰富的 CRUD 操作方法
  • 支持复杂的查询和聚合操作
  • 需要手动编写查询逻辑

示例代码:

查询:

import org.springframework.data.geo.Circle;
import org.springframework.data.geo.Distance;
import org.springframework.data.geo.Metrics;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;  

  // 注入
  @Autowired
  private MongoTemplate mongoTemplate;

  // 调用mongoTemplate,查询周边数据

// 查询指定经纬度附近的站点
public List<StationLocation> nearbyStation(String latitude, String longitude) {
	//确定中心点,根据经纬度获取站点信息
	GeoJsonPoint point = new GeoJsonPoint(Double.parseDouble(longitude), Double.parseDouble(latitude));
	//设置查询半径,查询站点周边50公里范围的信息
	Distance distance = new Distance(50, Metrics.KILOMETERS);
	//画圆 确定查询范围
	Circle circle = new Circle(point, distance);
	//查询MongoDB数据库中站点信息
	Query query = new Query(Criteria.where("location").withinSphere(circle));
	List<StationLocation> stations = mongoTemplate.find(query, StationLocation.class);
}

  
   

4.2 MongoRepository

特点

  • 基于 JPA 风格的 Repository 接口
  • 支持方法名自动生成查询
  • 提供基本的 CRUD 操作
  • 可通过注解扩展自定义查询
  • 适合简单的 CRUD 操作

示例代码:

创建Repository的接口

//StationLocation为要查询的文档对应的实体类,String为实体类StationLocation主键的类型
public interface StationLocationRepository extends MongoRepository<StationLocation, String> {
    
	//方法要规范命名,mongodb才能按图索骥找到对应的数据
    StationLocation getByStationId(Long id);

}

调用上面定义的Repository新增插入数据:

 @Autowired
 private StationLocationRepository stationLocationRepository;
 
 public int saveStation(Station station) {
        String provinceName = regionService.getNameByCode(station.getProvinceCode());
        String cityName = regionService.getNameByCode(station.getCityCode());
        String districtName = regionService.getNameByCode(station.getDistrictCode());
        station.setFullAddress(provinceName + cityName + districtName + station.getAddress());
        int rows = stationMapper.insert(station);

        StationLocation stationLocation = new StationLocation();
        stationLocation.setId(ObjectId.get().toString());
        stationLocation.setStationId(station.getId());
        stationLocation.setLocation(new GeoJsonPoint(station.getLongitude().doubleValue(), station.getLatitude().doubleValue()));
        stationLocation.setCreateTime(new Date());
        stationLocationRepository.save(stationLocation);

        return rows;
    }

修改数据

@Autowired
private StationLocationRepository stationLocationRepository;

public int updateStation(Station station) {

	StationLocation stationLocation = stationLocationRepository.getByStationId(station.getId());
	stationLocation.setLocation(new GeoJsonPoint(station.getLongitude().doubleValue(), station.getLatitude().doubleValue()));
	stationLocationRepository.save(stationLocation);
	return rows;
}

4.3  ReactiveMongoTemplate

特点

  • 响应式编程模型的 MongoTemplate
  • 返回 Mono 或 Flux 类型
  • 适合非阻塞、异步应用
  • 需要 Spring WebFlux 环境

示例代码

@Autowired
private ReactiveMongoTemplate reactiveMongoTemplate;

public Mono<User> findUserById(String id) {
    return reactiveMongoTemplate.findById(id, User.class);
}

4.4 ReactiveMongoRepository

特点

  • 响应式版本的 MongoRepository
  • 返回 Publisher 类型 (Mono/Flux)
  • 支持响应式流处理
  • 适合全栈响应式应用

示例代码

// 创建ReactiveRepository
public interface UserReactiveRepository extends ReactiveMongoRepository<User, String> {
    Flux<User> findByName(String name);
}

// 使用
@Autowired
private UserReactiveRepository userReactiveRepository;

4.5  原生 MongoDB Java 驱动

特点

  • 直接使用 MongoDB 官方 Java 驱动
  • 不依赖 Spring Data 抽象层
  • 最灵活但也最底层
  • 需要手动处理更多细节

示例代码

@Autowired
private MongoClient mongoClient;

public void insertUser(User user) {
    MongoDatabase database = mongoClient.getDatabase("test");
    MongoCollection<Document> collection = database.getCollection("users");
    collection.insertOne(new Document("name", user.getName())
        .append("age", user.getAge()));
}

五、主要区别对比

方式编程模型抽象级别适用场景学习曲线
MongoTemplate命令式中等复杂查询/操作中等
MongoRepository命令式简单 CRUD
ReactiveMongoTemplate响应式中等响应式复杂操作较高
ReactiveMongoRepository响应式响应式简单 CRUD中等
原生驱动命令式需要直接控制

六、选择建议

  • 简单 CRUD:优先考虑 MongoRepository/ReactiveMongoRepository
  • 复杂查询/聚合:使用 MongoTemplate/ReactiveMongoTemplate
  • 响应式应用:选择 Reactive 版本
  • 需要直接控制底层:使用原生驱动。

到此这篇关于Springboot+MongoDB简单使用示例的文章就介绍到这了,更多相关Springboot MongoDB使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • 教你Java中的Lock锁底层AQS到底是如何实现的

    教你Java中的Lock锁底层AQS到底是如何实现的

    本文是基于ReentrantLock来讲解,ReentrantLock加锁只是对AQS的api的调用,底层的锁的状态(state)和其他线程等待(Node双向链表)的过程其实是由AQS来维护的,对Java Lock锁AQS实现过程感兴趣的朋友一起看看吧
    2022-05-05
  • 浅析Spring获取Bean的九种方法详解

    浅析Spring获取Bean的九种方法详解

    随着SpringBoot的普及,Spring的使用也越来越广,在某些场景下,我们无法通过注解或配置的形式直接获取到某个Bean。比如,在某一些工具类、设计模式实现中需要使用到Spring容器管理的Bean,此时就需要直接获取到对应的Bean,这篇文章主要介绍了Spring获取Bean的九种方法
    2023-01-01
  • Spring SpringMVC在启动完成后执行方法源码解析

    Spring SpringMVC在启动完成后执行方法源码解析

    这篇文章主要介绍了SpringMVC在启动完成后执行方法源码解析,还是非常不错的,在这里分享给大家,需要的朋友可以参考下。
    2017-09-09
  • springmvc fastjson 反序列化时间格式化方法(推荐)

    springmvc fastjson 反序列化时间格式化方法(推荐)

    下面小编就为大家带来一篇springmvc fastjson 反序列化时间格式化方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • 使用HandlerMethodArgumentResolver用于统一获取当前登录用户

    使用HandlerMethodArgumentResolver用于统一获取当前登录用户

    这篇文章主要介绍了使用HandlerMethodArgumentResolver用于统一获取当前登录用户实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • 多jdk环境下指定springboot外部配置文件详解

    多jdk环境下指定springboot外部配置文件详解

    这篇文章主要为大家介绍了多jdk环境下指定springboot外部配置文件详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 基于SpringBoot框架管理Excel和PDF文件类型

    基于SpringBoot框架管理Excel和PDF文件类型

    这篇文章主要介绍了基于SpringBoot框架,管理Excel和PDF文件类型,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • 浅谈@RequestMapping注解的注意点

    浅谈@RequestMapping注解的注意点

    这篇文章主要介绍了浅谈@RequestMapping注解的注意点,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • jedis操作redis的几种常见方式总结

    jedis操作redis的几种常见方式总结

    Redis是一个著名的key-value存储系统,也是nosql中的最常见的一种,这篇文章主要给大家总结了关于在java中jedis操作redis的几种常见方式,文中给出了详细的示例代码供大家参考学习,需要的朋友们下面来一起看看吧。
    2017-05-05
  • 利用Java实现图片马赛克效果

    利用Java实现图片马赛克效果

    马赛克效果是一种常见的图像处理技术,通过将图像划分为多个小块并对每个小块进行平均色处理,模拟马赛克的效果,在本项目中,我们将使用Java的Swing库和图像处理技术来实现图片的马赛克特效,需要的朋友可以参考下
    2025-02-02

最新评论