Spring Data MongoDB 使用
本文为博主原创,转载请注明出处:
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
- 使用 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 文档以获得更全面的了解。
注意事项:
- 方法名称必须遵循命名规则,否则可能会导致查询失败。
- 方法参数的数量和类型必须与属性的类型和数量匹配。
- 在使用一些特殊操作时,如模糊查询、集合查询等,可以使用
Like、In等关键字来指定更复杂的条件。
以下是一个简单的示例:
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 注解:
- 在需要进行自定义查询的方法上添加
@Query注解,并提供相应的查询语句。 - 在查询语句中使用命名参数(例如
:paramName)来引用方法参数。 - 如果有多个参数,可以通过索引位置(例如
?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 使用的更多相关文章
- spring data mongodb 配置遇到的几个问题
一. mongodb 2.2版本以上的配置 spring.data.mongodb.uri = mongodb://newlook:newlook@192.168.0.109:27017/admin ...
- spring data mongodb中,如果对象中的属性不想加入到数据库字段中
spring data mongodb中,如果对象中的属性不想加入到数据库字段中,可加@Transient注解,声明为透明属性 spring data mongodb 官网帮助文档 http://ww ...
- 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 ...
- 使用Spring访问Mongodb的方法大全——Spring Data MongoDB查询指南
1.概述 Spring Data MongoDB 是Spring框架访问mongodb的神器,借助它可以非常方便的读写mongo库.本文介绍使用Spring Data MongoDB来访问mongod ...
- Spring data mongodb 聚合,投射,内嵌数组文档分页.
尽量别直接用 DBObject ,Spring data mongodb 的api 本来就没什么多大用处,如果还直接用 DBObject 那么还需要自己去解析结果,说动做个对象映射,累不累 Spri ...
- JAVA 处理 Spring data mongodb 时区问题
Spring data mongodb 查询出结果的时候会自动 + 8小时,所以我们看起来结果是对的 但是我们查询的时候,并不会自动 + 8小时,需要自己处理 解决方法 1 @JsonFormat ...
- Spring data mongodb ObjectId ,根据id日期条件查询,省略@CreatedDate注解
先看看ObjectId 的json 结构,非常丰富,这里有唯一机器码,日期,时间戳等等,所以强烈建议ID 使用 ObjectId 类型,并且自带索引 Spring data mongodb 注解 @C ...
- Spring data mongodb @CreatedBy@LastModifiedBy@CreatedBy@LastModifiedBy SpringSecurityAuditorAware,只记录用户名
要在Spring data mongodb 中使用@CreatedBy@LastModifiedBy@CreatedBy@LastModifiedBy 这四个注解 必须实现 SpringSecuri ...
- Spring Data MongoDB 三:基本文档查询(Query、BasicQuery)(一)
一.简单介绍 Spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一 ...
- Introduction to Spring Data MongoDB
Introduction to Spring Data MongoDB I just announced the new Spring 5 modules in REST With Spring: & ...
随机推荐
- .NET快速开发框架-RDIFramework.NET 全新EasyUI版发布
RDIFramework.NET,基于.NET的快速信息化系统快速开发框架.10年专注.易上手.多组件.全源码.可灵活构建各类型系统. 1.RDIFramework.NET快速开发框架简介 RDIFr ...
- 分享一个开源的windows安卓投屏工具,scrcpy
看到scrcpy可能很多人会以为是大名鼎鼎的Scrcpy(一个十分强大的多线路爬虫框架),sorry今天分享的主角不是他,而是他: github地址:https://github.com/Genymo ...
- Dotnet初探: 尝试使用 dotnet6 的miniapi
引子 最近我们学校要求我们使用dotnet实现一个登录功能,由于我们学校的教程老旧(万年经典asp .net 4.x,慢的要死),我看有高性能又免费的Dotnet6不用,还又要退回几年前,于是决定另开 ...
- Mysql8.0为什么取消了缓存查询的功能
首先我们介绍一下MySQL的缓存机制 [MySQL缓存机制]简单的说就是缓存sql文本及查询结果,如果运行完全相同的SQL,服务器直接从缓存中取到结果,而不需要再去解析和执行SQL. 但如果表中任何数 ...
- 沁恒 CH32V208(一): CH32V208WBU6 评估板上手报告和Win10环境配置
目录 沁恒 CH32V208(一): CH32V208WBU6 评估板上手报告和Win10环境配置 CH32V208 CH32V208系列是沁恒32位RISC-V中比较新的一个系列, 基于青稞RISC ...
- autojs系列-js入门1
开头 确保 Autojs 和 adb 还有模拟器安装调试完成之后,就可以进行js的学习了 调试安装一部分步骤可以参考 https://www.cnblogs.com/c-keke/p/14919615 ...
- 2022-08-04:输入:去重数组arr,里面的数只包含0~9。limit,一个数字。 返回:要求比limit小的情况下,能够用arr拼出来的最大数字。 来自字节。
2022-08-04:输入:去重数组arr,里面的数只包含0~9.limit,一个数字. 返回:要求比limit小的情况下,能够用arr拼出来的最大数字. 来自字节. 答案2022-08-04: 从左 ...
- vue全家桶进阶之路15:自定义指令
Vue 2.x 中的自定义指令是一种可以用于扩展 Vue.js 核心功能的特性.指令可以用于操作 DOM 元素的属性.监听 DOM 事件.控制 DOM 行为等等,可以将常见的交互行为封装成指令,从而让 ...
- 开发者一定要知道的 API 管理五大趋势
API First 大势所趋,APIaaS(API 作为服务)也将受到越来越多企业和组织的选择,研发团队对 API 研发管理工具的要求也水涨船高. API 在今天的数字化世界中扮演着至关重要的角色,随 ...
- 8张图带你全面了解kafka的核心机制
前言 kafka是目前企业中很常用的消息队列产品,可以用于削峰.解耦.异步通信.特别是在大数据领域中应用尤为广泛,主要得益于它的高吞吐量.低延迟,在我们公司的解决方案中也有用到.既然kafka在企业中 ...