Overview
在本教程中,您可以学习;了解如何创建一个 Spring Boot应用程序,通过使用 Hibernate ORM 扩展在MongoDB中存储Java Persistence API (JPA) 实体。该应用程序定义了一个 Movie 实体、一个 Spring Data JPA存储库以及一个在初创企业运行的查询。
在开始之前,请完成 Hibernate ORM 扩展入门教程中的创建MongoDB部署和创建连接字符串步骤。这些步骤将创建本教程使用的Atlas部署、示例数据和连接字符串。
安装应用程序入门工具
创建 Spring Boot项目
创建一个名为 MongoHibernateSpringQuickstart 的 Spring Boot 4.x项目。您可以使用 Spring Initializr 生成项目,也可以在 IDE 中创建项目。
Spring Initializr 生成以您的项目命名的主应用程序程序类,例如 MongoHibernateSpringQuickstartApplication.java。如果使用 Spring Initializr 生成项目,删除自动生成的主应用程序类文件。在本教程的后面,您将为此项目创建一个名为 Movie Application 的主应用程序文件。如果您的项目包含两个主应用程序程序类,则应用程序将无法启动,并出现 Unable to find a single main class 错误。
添加启动器依赖项
对于 Maven 项目,请将以下依赖项添加到 pom.xml文件中:
<dependencies> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-hibernate-spring-boot-starter</artifactId> <version>1.0.0</version> </dependency> </dependencies>
对于 Gradle 项目,请将以下依赖项添加到您的 build.gradle文件中:
dependencies { implementation("org.mongodb:mongodb-hibernate-spring-boot-starter:1.0.0") }
覆盖托管Hibernate ORM 版本
入门版需要 Hibernate ORM 7.4 或更高版本。 Spring Boot 通过其物料清单 (BOM) 管理 Hibernate ORM 版本,并且某些 Spring Boot 4.x 版本管理的Hibernate ORM 版本比入门者所需的版本更早。如果托管版本早于 7.4,您的应用程序将无法启动,并且 Hibernate ORM 扩展会引发 NoSuchMethodError。
要覆盖 Maven项目中的托管版本,请将以下属性添加到 pom.xml文件中:
<properties> <hibernate.version>7.4.7.Final</hibernate.version> </properties>
要覆盖 Gradle项目中的托管版本,请将以下行添加到您的 build.gradle文件中:
ext['hibernate.version'] = '7.4.7.Final'
重新加载或同步项目以完成安装。
配置应用程序
设置应用程序属性
在项目的 src/main/resources目录中,打开 application.properties文件并添加以下属性:
spring.jpa.database-platform=MongoDB spring.mongodb.uri=<connection string> spring.jpa.properties.com.mongodb.hibernate.semantics.nulls=MQL
将 <connection string> 占位符替换为您在 Hibernate ORM 扩展入门教程的创建连接字符串步骤中创建的 sample_mflix连接字符串。您的连接字符串应类似于以下示例:
mongodb+srv://<db_username>:<db_password>@<cluster>/sample_mflix?<options>
您设立的应用程序属性将执行以下操作:
spring.jpa.database-platform:激活启动器。除非将此属性设立为MongoDB,否则启动器将保持非活动状态。spring.mongodb.uri:配置启动器重复使用的MongoClient实例。启动器不会创建自己的客户端。spring.jpa.properties.com.mongodb.hibernate.semantics.nulls:声明查询使用的 null 比较语义。此属性为必填项,唯一支持的值为MQL。
定义您的 Movie 实体
在项目的 src/main/java/org/example目录中,创建一个名为 Movie.java 的文件并将以下代码粘贴到其中:
package org.example; import com.mongodb.hibernate.annotations.ObjectIdGenerator; import org.bson.types.ObjectId; import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.Table; public class Movie { private ObjectId id; private String title; private int year; public Movie() { } public Movie(String title, int year) { this.title = title; this.year = year; } public ObjectId getId() { return id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public int getYear() { return year; } public void setYear(int year) { this.year = year; } }
该实体表示Atlas示例数据集中的 sample_mflix.movies集合。启动程序会扫描应用程序的主包中是否存在实体,因此您无需注册实体。
定义存储库
在同一目录中,创建名为 MovieRepository.java 的文件并将以下代码粘贴到其中:
package org.example; import org.bson.types.ObjectId; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; public interface MovieRepository extends JpaRepository<Movie, ObjectId> { List<Movie> findByTitle(String title); }
启动器无需SQL DataSource 即可启用 Spring Data JPA 存储库,因此 Spring Boot 会为您实现 MovieRepository 接口。
定义应用程序程序类
在同一目录中,创建名为 MovieApplication.java 的文件并将以下代码粘贴到其中:
package org.example; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; public class MovieApplication { public static void main(String[] args) { SpringApplication.run(MovieApplication.class, args); } CommandLineRunner run(MovieRepository repository) { return args -> { for (Movie movie : repository.findByTitle("Little Women")) { System.out.println("Title: " + movie.getTitle() + ", Year: " + movie.getYear()); } }; } }
该类在初创企业时运行存储库查询并打印每部匹配的电影。
完成这些步骤后,您的应用程序将具有以下文件结构:
MongoHibernateSpringQuickstart ├── src │ └── main │ ├── java │ │ └── org/example │ │ ├── Movie.java │ │ ├── MovieApplication.java │ │ └── MovieRepository.java │ └── resources │ └── application.properties ├── .gitignore ├── pom.xml (for Maven projects) └── build.gradle (for Gradle projects)
运行应用程序
在 IDE 中运行 MovieApplication 类。输出类似于以下文本:
Title: Little Women, Year: 1949 Title: Little Women, Year: 1994
后续步骤
要学习;了解如何设立JPA 属性、更改字段命名策略和自定义 MongoClient,请参阅配置 Spring Boot Starter。