本文为博主原创,转载请注明出处:

  Spring Data MongoDB 是 Spring Data 系列的一部分,它提供了与 MongoDB 的集成和操作支持,类似于 JPA 对关系型数据库的支持。通过使用 Spring Data MongoDB,您可以使用类似于 JPA 的 Repository 接口、自动映射功能以及其他便利特性来访问和操作 MongoDB 数据库。

1.Spring Data MongoDB接入

1.1添加依赖:

  在项目的构建文件(如 Maven 的 pom.xml 或 Gradle 的 build.gradle)中添加 Spring Data MongoDB 的依赖项。例如,在 Maven 中添加以下依赖项:

<dependencies>
<!-- 其他依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
</dependencies>

1.2 创建实体类:

  使用 MongoDB 的注解来定义实体类,并将其映射到 MongoDB 的集合(collection)。注解包括 @Document@Field@Id 等。

import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.annotation.Id; @Document(collection = "users")
public class User { @Id
private String id; @Field("name")
private String name; // getter and setter methods
}

1.3创建 Repository 接口:

  创建一个继承自 MongoRepository(或其他 Spring Data MongoDB 提供的 Repository 接口)的接口,用于访问和操作实体类对应的 MongoDB 数据

import org.springframework.data.mongodb.repository.MongoRepository;

public interface UserRepository extends MongoRepository<User, String> {
// 可根据需要添加自定义查询方法
}

1.4配置 MongoDB 连接信息:

  在 Spring Boot 的配置文件中,配置 MongoDB 的连接信息,例如数据库名称、主机地址、端口等。

spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=mydatabase
  1. 使用 Repository 进行操作:在需要使用 MongoDB 操作的地方,通过注入 Repository 接口对象来调用相应的方法。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; @Service
public class UserService { private final UserRepository userRepository; @Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
} public User saveUser(User user) {
return userRepository.save(user);
} public User getUserById(String id) {
return userRepository.findById(id).orElse(null);
} // 其他操作方法
}

  上述示例是一个简单的使用 JPA 和 MongoDB 的流程。它包括创建实体类、定义 Repository 接口、配置 MongoDB 的连接信息和使用 Repository 进行操作。这样可以使用 Spring Data MongoDB 结合 JPA 和 MongoDB 进行开发,并享受到 Spring Data 提供的便利特性。

2.Spring Data MongoDB 自定义方法解析使用

  在 UserRepository 中定义使用的方法非常简单。Spring Data MongoDB 提供了一套命名规则,它根据方法名自动解析和生成查询语句。您可以按照规则给方法命名,而不需要编写具体的查询语句。

  以下是一些常见的方法命名规则及其解析方式:

  • 根据属性查询:

    • findBy<PropertyName>:根据属性名称进行查询,例如 findByName(String name)
    • findBy<PropertyName>And<OtherProperty>:根据多个属性进行查询,并通过 "And" 连接,例如 findByNameAndAge(String name, int age)
  • 按条件查询:

    • findBy<PropertyName>Equals:根据属性的精确匹配进行查询,例如 findByNameEquals(String name)
    • findBy<PropertyName>In:根据属性值在给定集合中的条件进行查询,例如 findByAgeIn(Collection<Integer> ages)
  • 模糊查询:

    • findBy<PropertyName>Like:根据属性值进行模糊查询,例如 findByNameLike(String keyword)

  除了以上示例,还有更多可用的方法命名规则,可以根据具体需求查阅 Spring Data MongoDB 文档以获得更全面的了解。

  注意事项:

  • 方法名称必须遵循命名规则,否则可能会导致查询失败。
  • 方法参数的数量和类型必须与属性的类型和数量匹配。
  • 在使用一些特殊操作时,如模糊查询、集合查询等,可以使用 LikeIn 等关键字来指定更复杂的条件。

  以下是一个简单的示例:

import org.springframework.data.mongodb.repository.MongoRepository;
import java.util.List; public interface UserRepository extends MongoRepository<User, String> {
List<User> findByName(String name);
List<User> findByAgeGreaterThan(int age);
List<User> findByEmailNotNull();
List<User> findByAgeIn(List<Integer> ages);
List<User> findByNameLike(String keyword);
}

  在上述示例中,UserRepository 定义了五个查询方法:根据名称查询用户、根据年龄大于给定值查询用户、查询邮箱不为 null 的用户、根据年龄在给定集合中查询用户以及根据名称进行模糊查询。这些方法会根据方法名自动解析为相应的查询条件,并返回符合条件的用户列表。

  请注意,在实际使用过程中,可能需要处理一些特定的查询场景或复杂的条件,可能需要编写自定义的查询语句。Spring Data MongoDB 提供了注解和其他方式来支持自定义查询,以满足更复杂的需求。

3.自定义查询语句

  在 Spring Data MongoDB 中,可以使用自定义的查询语句来满足特定的查询需求。以下是两种常用的方式来实现自定义查询:

3.1使用 @Query 注解:

  1. 在需要进行自定义查询的方法上添加 @Query 注解,并提供相应的查询语句。
  2. 在查询语句中使用命名参数(例如 :paramName)来引用方法参数。
  3. 如果有多个参数,可以通过索引位置(例如 ?0?1)引用它们。

  示例:

import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import java.util.List; public interface UserRepository extends MongoRepository<User, String> {
@Query("{ 'name' : ?0 }")
List<User> findByName(String name); @Query("{ 'age' : { $gt: ?0 }, 'email' : { $ne: null } }")
List<User> findByAgeGreaterThanAndEmailNotNull(int age);
}

  在上述示例中,使用了 @Query 注解来自定义查询语句。通过 ?0 引用了方法参数,并根据属性条件进行查询。

3.2使用 Criteria API:

    • 创建一个 Criteria 对象,并使用其提供的方法来构建查询条件。
    • 将 Criteria 对象传递给 MongoTemplate 的 find 方法进行查询。

  示例:

import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import java.util.List; public class UserRepositoryImpl implements UserRepositoryCustom { private final MongoTemplate mongoTemplate; public UserRepositoryImpl(MongoTemplate mongoTemplate) {
this.mongoTemplate = mongoTemplate;
} @Override
public List<User> findByAgeGreaterThanAndEmailNotNull(int age) {
Criteria criteria = Criteria.where("age").gt(age).and("email").ne(null);
Query query = new Query(criteria);
return mongoTemplate.find(query, User.class);
}
}

  在上述示例中,UserRepositoryImpl 实现了 UserRepositoryCustom 接口,并使用 MongoTemplate 和 Criteria API 来自定义查询方法。在 findByAgeGreaterThanAndEmailNotNull 方法中,创建了一个 Criteria 对象,并指定年龄大于给定值且邮箱不为空的条件,然后将其传递给 Query 对象并执行查询。

Spring Data MongoDB 使用的更多相关文章

  1. spring data mongodb 配置遇到的几个问题

    一. mongodb 2.2版本以上的配置 spring.data.mongodb.uri = mongodb://newlook:newlook@192.168.0.109:27017/admin ...

  2. spring data mongodb中,如果对象中的属性不想加入到数据库字段中

    spring data mongodb中,如果对象中的属性不想加入到数据库字段中,可加@Transient注解,声明为透明属性 spring data mongodb 官网帮助文档 http://ww ...

  3. Spring Data MongoDB example with Spring MVC 3.2

    Spring Data MongoDB example with Spring MVC 3.2 Here is another example web application built with S ...

  4. 使用Spring访问Mongodb的方法大全——Spring Data MongoDB查询指南

    1.概述 Spring Data MongoDB 是Spring框架访问mongodb的神器,借助它可以非常方便的读写mongo库.本文介绍使用Spring Data MongoDB来访问mongod ...

  5. Spring data mongodb 聚合,投射,内嵌数组文档分页.

    尽量别直接用 DBObject  ,Spring data mongodb 的api 本来就没什么多大用处,如果还直接用 DBObject 那么还需要自己去解析结果,说动做个对象映射,累不累 Spri ...

  6. JAVA 处理 Spring data mongodb 时区问题

    Spring data mongodb 查询出结果的时候会自动 + 8小时,所以我们看起来结果是对的 但是我们查询的时候,并不会自动 + 8小时,需要自己处理 解决方法 1   @JsonFormat ...

  7. Spring data mongodb ObjectId ,根据id日期条件查询,省略@CreatedDate注解

    先看看ObjectId 的json 结构,非常丰富,这里有唯一机器码,日期,时间戳等等,所以强烈建议ID 使用 ObjectId 类型,并且自带索引 Spring data mongodb 注解 @C ...

  8. Spring data mongodb @CreatedBy@LastModifiedBy@CreatedBy@LastModifiedBy SpringSecurityAuditorAware,只记录用户名

    要在Spring data mongodb 中使用@CreatedBy@LastModifiedBy@CreatedBy@LastModifiedBy  这四个注解 必须实现 SpringSecuri ...

  9. Spring Data MongoDB 三:基本文档查询(Query、BasicQuery)(一)

    一.简单介绍 Spring Data  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一 ...

  10. Introduction to Spring Data MongoDB

    Introduction to Spring Data MongoDB I just announced the new Spring 5 modules in REST With Spring: & ...

随机推荐

  1. .NET快速开发框架-RDIFramework.NET 全新EasyUI版发布

    RDIFramework.NET,基于.NET的快速信息化系统快速开发框架.10年专注.易上手.多组件.全源码.可灵活构建各类型系统. 1.RDIFramework.NET快速开发框架简介 RDIFr ...

  2. 分享一个开源的windows安卓投屏工具,scrcpy

    看到scrcpy可能很多人会以为是大名鼎鼎的Scrcpy(一个十分强大的多线路爬虫框架),sorry今天分享的主角不是他,而是他: github地址:https://github.com/Genymo ...

  3. Dotnet初探: 尝试使用 dotnet6 的miniapi

    引子 最近我们学校要求我们使用dotnet实现一个登录功能,由于我们学校的教程老旧(万年经典asp .net 4.x,慢的要死),我看有高性能又免费的Dotnet6不用,还又要退回几年前,于是决定另开 ...

  4. Mysql8.0为什么取消了缓存查询的功能

    首先我们介绍一下MySQL的缓存机制 [MySQL缓存机制]简单的说就是缓存sql文本及查询结果,如果运行完全相同的SQL,服务器直接从缓存中取到结果,而不需要再去解析和执行SQL. 但如果表中任何数 ...

  5. 沁恒 CH32V208(一): CH32V208WBU6 评估板上手报告和Win10环境配置

    目录 沁恒 CH32V208(一): CH32V208WBU6 评估板上手报告和Win10环境配置 CH32V208 CH32V208系列是沁恒32位RISC-V中比较新的一个系列, 基于青稞RISC ...

  6. autojs系列-js入门1

    开头 确保 Autojs 和 adb 还有模拟器安装调试完成之后,就可以进行js的学习了 调试安装一部分步骤可以参考 https://www.cnblogs.com/c-keke/p/14919615 ...

  7. 2022-08-04:输入:去重数组arr,里面的数只包含0~9。limit,一个数字。 返回:要求比limit小的情况下,能够用arr拼出来的最大数字。 来自字节。

    2022-08-04:输入:去重数组arr,里面的数只包含0~9.limit,一个数字. 返回:要求比limit小的情况下,能够用arr拼出来的最大数字. 来自字节. 答案2022-08-04: 从左 ...

  8. vue全家桶进阶之路15:自定义指令

    Vue 2.x 中的自定义指令是一种可以用于扩展 Vue.js 核心功能的特性.指令可以用于操作 DOM 元素的属性.监听 DOM 事件.控制 DOM 行为等等,可以将常见的交互行为封装成指令,从而让 ...

  9. 开发者一定要知道的 API 管理五大趋势

    API First 大势所趋,APIaaS(API 作为服务)也将受到越来越多企业和组织的选择,研发团队对 API 研发管理工具的要求也水涨船高. API 在今天的数字化世界中扮演着至关重要的角色,随 ...

  10. 8张图带你全面了解kafka的核心机制

    前言 kafka是目前企业中很常用的消息队列产品,可以用于削峰.解耦.异步通信.特别是在大数据领域中应用尤为广泛,主要得益于它的高吞吐量.低延迟,在我们公司的解决方案中也有用到.既然kafka在企业中 ...