MongoDB.local SF, Jan 15: See the speaker lineup & ship your AI vision faster. Use WEB50 to save 50%
Find out more >
Docs 菜单
Docs 主页
/ /

开始使用适用于 Hibernate ORM 的 MongoDB 扩展

Hibernate ORM 使您能够使用Java对象执行数据库操作,并且您可以使用适用于 Hibernate ORM 的MongoDB扩展来简化应用程序与MongoDB数据的交互。本指南介绍如何安装 Hibernate ORM 扩展、设立MongoDB 部署以及创建定义映射到MongoDB集合的类的Java应用程序。

提示

MongoDB Atlas 是完全托管的云数据库服务,旨在托管您的 MongoDB 部署。您可以按照本指南中的步骤创建您的免费(无需信用卡)MongoDB Atlas 部署。

1

在开始开发之前,请确保本地计算机上安装了以下依赖项:

  • Java 版本 17 或更高版本

  • 集成开发环境 (IDE),例如 IntelliJ IDEAEclipse

注意

本教程介绍如何在 IDE 中使用 Maven 或 Gradle 创建应用程序。如果不使用 IDE,请参阅构建 Maven 或创建新的 Gradle 构建,学习;了解如何设立项目。

2

在 IDE 中,创建一个名为 MongoHibernateQuickstart 的新 Maven 或 Gradle项目。对于 Maven 项目,请将以下依赖项添加到 pom.xml文件中:

<dependencies>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-hibernate</artifactId>
<version>1.0.0-alpha0</version>
</dependency>
</dependencies>

对于 Gradle 项目,请将以下依赖项添加到您的 build.gradle文件中:

dependencies {
implementation("org.mongodb:mongodb-hibernate:1.0.0-alpha0")
}

在 IDE 中,确保重新加载或同步项目以完成 Hibernate ORM 扩展安装。

完成这些步骤后,您已安装 Hibernate ORM 扩展,并在 IDE 中设立新的 Maven 或 Gradle项目。

您可以在 MongoDB Atlas 上创建一个免费套餐 MongoDB 部署来存储和管理您的数据。MongoDB Atlas 在云端托管和管理您的 MongoDB 数据库。

1

完成MongoDB 入门指南,设立新的Atlas帐户并将示例数据加载到新的免费套餐MongoDB 部署。按照 Cloud Deployment 标签页中的说明在云中创建MongoDB Atlas部署。

2

创建数据库用户后,将该用户的数据库用户名和数据库保存到安全位置,以便在下一步中使用。

完成这些步骤后,您就在 Atlas 上有了一个新的免费套餐 MongoDB 部署、数据库用户档案以及加载到数据库中的示例数据。

您可以通过提供连接 URI(也称为连接字符串)来连接到 MongoDB 部署,它指示驱动程序如何连接到 MongoDB 部署以及连接时的行为方式。

连接字符串包含部署的主机名或 IP 地址和端口、身份验证机制、用户档案(如果适用)以及连接选项。

1

要检索您在上一步中创建的部署的连接字符串,日志登录您的Atlas帐户并导航到 Clusters 部分。单击新部署的 Connect 按钮,如以下屏幕截图所示:

Atlas 用户界面的集群部分中的连接按钮

然后,继续执行 Connect your application 部分。从 Driver 选择菜单中选择“Java”,然后从 Version 选择菜单中选择与您安装的版本最匹配的版本。

2

单击连接string右侧的按钮将其复制到剪贴板,如以下屏幕截图所示:

Atlas 用户界面中的连接字符串复制按钮
3

将连接字符串保存在安全位置以供日后使用。将 <db_username><db_password>连接字符串占位符替换为数据库用户的用户名和密码。

4

要连接到应用程序在后续步骤中使用的 sample_mflix示例数据库,请将数据库名称添加到连接字符串中。

Your connection string should resemble the following example:

mongodb+srv://<db_username>:<db_password>@<cluster>/sample_mflix?<options>
5

在下一步中将连接字符串添加到 XML 配置文件之前,必须对连接字符串中的以下特殊字符进行编码:

  • &:替换为 &amp;

  • ':替换为 &apos;

  • ":替换为 &quot;

  • <:替换为 &lt;

  • >:替换为 &gt;

默认下, Atlas连接字符串包含由 & 字符分隔的连接选项。确保对此字符进行 XML 编码。

完成这些步骤后,您就拥有了一个包含用户名、密码和数据库的连接字符串。

安装 Hibernate ORM 扩展并创建MongoDB Atlas 群集后,您可以创建连接到MongoDB 的Java应用程序。

1

导航到 MongoHibernateQuickstart 项目的 src/main/resources目录并创建一个名为 hibernate.cfg.xml 的新文件,用于存储应用程序的配置设置。

将以下代码复制到此文件中:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">com.mongodb.hibernate.dialect.MongoDialect</property>
<property name="hibernate.connection.provider_class">
com.mongodb.hibernate.jdbc.MongoConnectionProvider
</property>
<property name="jakarta.persistence.jdbc.url">
connection-string
</property>
<property name="hibernate.show_sql">true</property>
<mapping class="org.example.Movie"/>
</session-factory>
</hibernate-configuration>

jakarta.persistence.jdbc.url 属性中,将connection-string 占位符替换为您在上一步中创建的连接字符串。

2

注意

默认包目录

本教程使用 Maven 和 Gradle 的默认org.example包,并将应用程序文件添加到 src/main/java/org/example目录。如果使用不同的包名称,请确保在相应的目录中创建文件。

在项目的 src/main/java/org/example目录中,创建一个名为 HibernateUtil.java 的新文件。该实用程序类会根据 hibernate.cfg.xml 配置文件创建一个 SessionFactory

将以下代码复制到此文件中:

package org.example;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public final class HibernateUtil {
private static final SessionFactory SESSION_FACTORY =
new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
private HibernateUtil() {}
public static SessionFactory getSessionFactory() { return SESSION_FACTORY; }
}
3

在项目的 org/example目录中,创建一个名为 Movie.java 的新文件。此文件包含您的 Movie 实体,它表示 Atlas 示例数据集 中的 sample_mflix.movies 示例集合。

将以下代码复制到此文件中:

package org.example;
import com.mongodb.hibernate.annotations.ObjectIdGenerator;
import org.bson.types.ObjectId;
import java.util.List;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
@Entity
@Table(name = "movies")
public class Movie {
@Id
@ObjectIdGenerator
private ObjectId id;
private String title;
private String plot;
private int year;
private List<String> cast;
public Movie(String title, String plot, int year, List<String> cast) {
this.title = title;
this.plot = plot;
this.year = year;
this.cast = cast;
}
public Movie() {
}
public ObjectId getId() {
return id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getPlot() {
return plot;
}
public void setPlot(String plot) {
this.plot = plot;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public List<String> getCast() {
return cast;
}
public void setCast(List<String> cast) {
this.cast = cast;
}
}

此文件定义了一个包含以下字段的 Movie 实体:

  • id:电影的唯一标识符,映射到MongoDB _id字段。

  • title:电影的标题。

  • year:电影上映的年份。

  • cast:表示电影演员的字符串列表。

4

在项目的 org/example目录中,创建一个名为 Main.java 的新文件。此文件包含主应用程序类,其中存储应用程序的逻辑。

将以下代码复制到此文件中:

package org.example;
import org.hibernate.Transaction;
import org.hibernate.Session;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
var sf = HibernateUtil.getSessionFactory();
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
// Add CRUD operations here
tx.commit();
session.close();
sf.close();
}
}

完成这些步骤后,您已将Java应用程序配置为使用 Hibernate ORM 扩展并连接到您的MongoDB部署。您的应用程序具有以下文件结构:

MongoHibernateQuickstart
├── src
│ └── main
│ ├── java
│ │ └── org/example
│ │ ├── HibernateUtil.java
│ │ ├── Main.java
│ │ └── Movie.java
│ └── resources
│ └── hibernate.cfg.xml
├── .gitignore
├── pom.xml (for Maven projects)
└── build.gradle (for Gradle projects)

您可以对 Movie 对象运行查询,扩展会将其转换为MongoDB查询。

1

导航到 Main.java文件并将以下代码粘贴到 // Add CRUD operations here 注释下方:

var searchTitle = "Little Women";
var results = session.createQuery("from Movie m where m.title = :t", Movie.class)
.setParameter("t", searchTitle)
.getResultList();
for (var m : results) {
System.out.println("Title: " + m.getTitle() + ", Year: " + m.getYear());
}

此代码使用 Hibernate ORM 的 Hibernate 查询语言 (HQL) 来检索title 值为 "Little Women"sample_mflix.movies 文档。然后,它会打印每个结果的 titleyear 值。

提示

要了解有关 HQL 的更多信息,请参阅 Hibernate ORM 用户指南中的Hibernate 查询语言

2

在 IDE 中运行 Main.java文件。输出包含有关数据库命令和检索到的文档的详细信息:

Hibernate: {"aggregate": "movies", "pipeline": [{"$match": {"title": {"$eq": {"$undefined": true}}}},
{"$project": {"_id": true, "cast": true, "plot": true, "title": true, "year": true}}]}
Title: Little Women, Year: 1949
Title: Little Women, Year: 1994

您可以通过创建和修改 Movie 对象将数据写入MongoDB 部署。

1

Main.java文件中,添加以下代码以创建名为 myMovieMovie 实体实例并将其保存到数据库:

var title = "A Real Pain";
var plot = "Mismatched cousins David and Benji tour Poland to honor their grandmother. " +
"Their adventure becomes complicated as old tensions resurface while exploring their family history.";
var year = 2024;
var cast = List.of("Jesse Eisenberg", "Kieran Culkin", "Will Sharpe");
var myMovie = new Movie(title, plot, year, cast);
session.persist(myMovie);
System.out.println("Movie created with ID: " + myMovie.getId());

此代码创建一个新的 Movie 实体实例,并使用 session.persist() 方法将其保存到数据库。

2

将以下代码添加到 Main.java文件,以更新您在上一步中创建的 Movie实例:

var currentCast = new ArrayList<>(myMovie.getCast());
currentCast.add("Jennifer Grey");
myMovie.setCast(currentCast);
System.out.println("Movie updated with new cast: " + myMovie.getCast());

此代码检索当前的 cast 值,向其添加新的节点,并更新 myMovie 实体实例的 cast字段。Hibernate ORM 扩展将此更改应用于数据库中的相应文档。

3

将以下代码添加到 Main.java文件以删除myMovie 实体实例:

session.remove(myMovie);
System.out.println("Movie deleted with ID: " + myMovie.getId());

此代码从数据库中删除 myMovie 实体实例及其相应的文档。

4

在 IDE 中运行 Main.java文件。输出包含有关写入操作的详细信息:

Hibernate: {"insert": "movies", "documents": [{"cast": {"$undefined": true}, "plot": {"$undefined": true}, "title": {"$undefined": true}, "year": {"$undefined": true}, "_id": {"$undefined": true}}]}
Hibernate: {"delete": "movies", "deletes": [{"q": {"_id": {"$eq": {"$undefined": true}}}, "limit": {"$numberInt": "0"}}]}
Movie created with ID: <ObjectId>
Movie updated with new cast: [Jesse Eisenberg, Kieran Culkin, Will Sharpe, Jennifer Grey]
Movie deleted with ID: <ObjectId>

恭喜您完成本教程!

注意

如果您在学习本教程时运行问题,请使用本页面右侧的 Rate this page 标签页提交反馈。

您可以使用MongoDB Stack Overflow标签 或MongoDB Reddit Community 寻求一般问题的支持。

在本教程中,您创建了一个Java应用程序,该应用程序连接到MongoDB Atlas上托管的MongoDB 部署,并使用 Hibernate ORM 扩展与数据进行交互。

要学习;了解有关 Hibernate ORM 扩展的更多信息,请参阅以下资源:

要查看演示如何安装 Hibernate ORM 扩展以及与图书数据交互的入门教程,请入门Hibernate ORM 和MongoDB Foojay博文。

后退

Overview