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

  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. CS144 计算机网络 Lab0:Networking Warmup

    前言 本科期间修读了<计算机网络>课程,但是课上布置的作业比较简单,只是分析了一下 Wireshark 抓包的结构,没有动手实现过协议.所以最近在哔哩大学在线学习了斯坦福大学的 CS144 ...

  2. logstash增量同步mysql数据到es

    本篇本章地址:https://www.cnblogs.com/Thehorse/p/11601013.html 今天我们来讲一下logstash同步mysql数据到es 我认为呢,logstash是众 ...

  3. 笔记:C++学习之旅 ---string 类、vector和迭代器

    string 类 #include <iostream> #include <string> using namespace std; int main() {         ...

  4. [双目视差] 立体匹配-SGBM半全局立体匹配算法

    立体匹配-SGBM半全局立体匹配算法 一.SGBM算法实现过程 1.预处理 预处理目的是得到图像的梯度信息 Step1:SGBM采用水平Sobel算子,对图像做处理,公式为: Sobel(x,y)=2 ...

  5. 浅谈 LIS 问题的几种做法

    LIS 问题也就是最长不下降子序列问题,是一个经典的问题. 做法一 我们发现可以动态规划,设 \(f_i\) 表示前 \(i\) 项包含 \(i\) 的 LIS 长度. 有转移方程: \[f_i=\m ...

  6. 2022-09-16:以下go语言代码输出什么?A:101;B:100;C:1;D:2。 package main import ( “fmt“ ) type MS struct {

    2022-09-16:以下go语言代码输出什么?A:101:B:100:C:1:D:2. package main import ( "fmt" ) type MS struct ...

  7. 2022-07-23:给定N件物品,每个物品有重量(w[i])、有价值(v[i]), 只能最多选两件商品,重量不超过bag,返回价值最大能是多少? N <= 10^5, w[i] <= 10^5, v

    2022-07-23:给定N件物品,每个物品有重量(w[i]).有价值(v[i]), 只能最多选两件商品,重量不超过bag,返回价值最大能是多少? N <= 10^5, w[i] <= 1 ...

  8. Winform 遮罩懒人处理法

    前言 之前有个项目需要执行一个略微耗时的操作大概五六七八九十秒这样子,这个时候程序不能做其他操作,只能等待操作完成.为了提升一丝使用体验同时让Winform程序看上去高级一点,就想到加一个遮罩层(Ma ...

  9. 原来.NET写的Linux桌面这么好看?

    如何使用Blazor在Linux平台下运行Desktop程序 本文将讲解如何使用Blazor运行跨平台应用,应用到的技术有以下几点 Blazor Masa Blazor Photino.Blazor ...

  10. 【GiraKoo】Android系统版本代号一览

    Android系统版本代号一览 Version CodeName API 时间 13.0 Tiramisu 33 2022.08 12.0 Snow Cone 31,32 2021.10 11.0 R ...