如何快速上手:springboot+mongodb

当使用 Java Spring Boot 与 MongoDB 时,可以使用 Spring Data MongoDB 来轻松地进行数据库操作。以下是一个简单的示例,演示如何在 Spring Boot 中使用 MongoDB 进行基本的 CRUD(创建、读取、更新、删除)操作。

Spring Data for MongoDB是 Spring Data 的一部分,提供与 MongoDB 文档数据库的集成,提供熟悉且一致的基于 Spring 的编程模型,同时保留存储特定的特性和功能。

特征

  • MongoTemplate:提高常见任务生产力的帮助程序类。
  • 对象映射:功能丰富、注释驱动的对象映射器。
  • 生命周期事件:保存、更新、删除挂钩和事件之前和之后。
  • 数据存储库:存储库接口,包括对自定义查询和聚合的支持。
  • 多文档事务:对多文档修改的托管事务支持。
  • 加密:自动且显式的客户端字段级加密。
  • GridFS:大文件存储。
  • Querydsl:类型安全的查询集成。
  • Kotlin:丰富开发人员体验的扩展。

1.Maven配置

增加Maven依赖:

复制代码
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-mongodb</artifactId>
  </dependency>

2.配置 MongoDB 连接

确保在 application.propertiesapplication.yml 文件中配置 MongoDB 的连接信息:

复制代码
spring.data.mongodb.host=127.0.0.1
spring.data.mongodb.port=27017
spring.data.mongodb.database=mydb1

3.创建实体类

创建一个简单的实体类来映射 MongoDB 中的文档:

复制代码
@Data
@Document
public class Customer {

	private String id, firstname, lastname;

	/**
	 * 使用给定的名字和姓氏创建新的Customer。
	 */
	public Customer(String firstname, String lastname) 

		this.firstname = firstname;
		this.lastname = lastname;
	}
}

4.创建 Repository 接口

创建一个继承自 MongoRepository 的 Repository 接口,用于操作 User 实体类:

复制代码
public interface CustomerRepository extends CrudRepository<Customer, String> {

	/**
	 * 使用Lastnameso,并支持排序
	 * @param lastname
	 * @param sort
	 * @return
	 */
	List<Customer> findByLastname(String lastname, Sort sort);
}

5.创建 CustomerRepositoryTest类

创建一个 CustomerRepositoryTest 类,测试接口功能,可以在此实现对数据库的操作:

复制代码
@DataMongoTest
class CustomerRepositoryIntegrationTest {

	@Autowired CustomerRepository customerRepository;
	private Customer dave, oliver, carter;

	@BeforeEach
	void setUp() {
		customerRepository.deleteAll();

		dave = customerRepository.save(new Customer("Dave", "Matthews"));
		oliver = customerRepository.save(new Customer("Oliver August", "Matthews"));
		carter = customerRepository.save(new Customer("Carter", "Beauford"));
	}

	/**
	 * Test case to show that automatically generated ids are assigned to the domain objects.
	 */
	@Test
	void setsIdOnSave() {

		var dave = customerRepository.save(new Customer("Dave", "Matthews"));
		assertThat(dave.getId()).isNotNull();
	}

	/**
	 * Test case to show the usage of the Querydsl-specific {@link QSort} to define the sort order in a type-safe way.
	 */
	@Test
	void findCustomersUsingQuerydslSort() {
		var result = customerRepository.findByLastname("Matthews", Sort.by("firstname"));

		assertThat(result).hasSize(2);
		assertThat(result.get(0)).isEqualTo(dave);
		assertThat(result.get(1)).isEqualTo(oliver);
	}

}

执行findCustomersUsingQuerydslSort后可以看到断点中result的值:

Spring Data是一个用于简化数据访问的项目,它提供了一种基于Repository模式的方式来访问各种不同种类的数据存储。Spring Data Repositories 可以通过命名规则自动生成查询方法,这使得开发者能够轻松地进行数据库操作而无需手动实现查询方法。

👉补充知识💬

以下是Spring Data Repository中方法的命名规则:

  1. 前缀关键字:
  • find: 表示查询操作,findById、findAll、findAllById。
  • delete: 表示删除操作,deleteById、deleteAll。
  • save:表示保存。
  1. 属性表达式:
  • 方法的后缀是实体类的属性名称,用于指定查询的条件。

例如,findByLastName(String lastName) 表示根据姓氏查询。

  1. And 和 Or:
  • 使用 AndOr 连接属性表达式,表示"与"和"或"关系。

例如,findByFirstNameAndLastName(String firstName, String lastName) 表示根据名字和姓氏进行查询。

  1. OrderBy:
  • 使用 OrderBy 可以指定查询结果的排序方式。

例如,findByLastNameOrderByFirstNameAsc(String lastName) 表示根据姓氏查询,并按照名字升序排序。

相关推荐
Albert Edison1 小时前
【最新版】IntelliJ IDEA 2025 创建 SpringBoot 项目
java·spring boot·intellij-idea
Piper蛋窝2 小时前
深入 Go 语言垃圾回收:从原理到内建类型 Slice、Map 的陷阱以及为何需要 strings.Builder
后端·go
六毛的毛4 小时前
Springboot开发常见注解一览
java·spring boot·后端
AntBlack4 小时前
拖了五个月 ,不当韭菜体验版算是正式发布了
前端·后端·python
31535669134 小时前
一个简单的脚本,让pdf开启夜间模式
前端·后端
uzong5 小时前
curl案例讲解
后端
开开心心就好5 小时前
免费PDF处理软件,支持多种操作
运维·服务器·前端·spring boot·智能手机·pdf·电脑
一只叫煤球的猫5 小时前
真实事故复盘:Redis分布式锁居然失效了?公司十年老程序员踩的坑
java·redis·后端
猴哥源码5 小时前
基于Java+SpringBoot的农事管理系统
java·spring boot
大鸡腿同学6 小时前
身弱武修法:玄之又玄,奇妙之门
后端