当使用 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.properties
或 application.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中方法的命名规则:
- 前缀关键字:
find
: 表示查询操作,findById、findAll、findAllById。delete
: 表示删除操作,deleteById、deleteAll。- save:表示保存。
- 属性表达式:
- 方法的后缀是实体类的属性名称,用于指定查询的条件。
例如,findByLastName(String lastName)
表示根据姓氏查询。
- And 和 Or:
- 使用
And
和Or
连接属性表达式,表示"与"和"或"关系。
例如,findByFirstNameAndLastName(String firstName, String lastName)
表示根据名字和姓氏进行查询。
- OrderBy:
- 使用
OrderBy
可以指定查询结果的排序方式。
例如,findByLastNameOrderByFirstNameAsc(String lastName)
表示根据姓氏查询,并按照名字升序排序。