Inhaltsverzeichnis
OID-Abfrage
对象导航检索
HQL检索
QBC检索
SQL检索
抓取策略
立即抓取
延迟抓取
批量抓取
延迟加载
Heim Java javaLernprogramm So verwenden Sie die Abfragestrategie und die Crawling-Strategie in Java Hibernate

So verwenden Sie die Abfragestrategie und die Crawling-Strategie in Java Hibernate

May 25, 2023 am 11:21 AM
java hibernate

Die Verwendung objektorientierter Methoden für den Zugriff auf die Datenbank wird von Hibernate bereitgestellt, einem beliebten ORM-Framework. Im Ruhezustand können wir eine Vielzahl von Abfragemethoden zum Abrufen von Daten verwenden, einschließlich OID-Abfrage, Objektnavigationsabruf, HQL-Abruf, QBC-Abruf und SQL-Abruf.

OID-Abfrage

OID (Object Identifier) ​​​​ist die eindeutige Kennung jedes persistenten Objekts im Ruhezustand. Sie können OID-Abfragen verwenden, um ein bestimmtes persistentes Objekt abzurufen. Bei der Verwendung einer OID-Abfrage müssen wir die Methode load() oder get() verwenden. Der Unterschied zwischen diesen beiden Methoden besteht darin, dass die Methode load() das Objekt bei Bedarf lädt, während die Methode get() das Objekt sofort lädt. Das Folgende ist ein Beispiel für die Verwendung der Methode get(): load()get()方法。这两个方法的区别在于,load()方法会在需要时才加载对象,而get()方法会立即加载对象。下面是一个使用get()方法的例子:

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Student student = (Student) session.get(Student.class, 1);
session.getTransaction().commit();
Nach dem Login kopieren

在上面的例子中,我们使用get()方法检索了一个ID为1的Student对象。

对象导航检索

对象导航检索允许我们通过对象之间的关系来检索数据。例如,如果我们有一个Student类和一个Address类,它们之间是一对一的关系,我们可以使用对象导航检索来检索一个特定的Student对象的地址。下面是一个使用对象导航检索的例子:

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Student student = (Student) session.get(Student.class, 1);
Address address = student.getAddress();
session.getTransaction().commit();
Nach dem Login kopieren

在上面的例子中,我们通过检索一个Student对象,并使用getAddress()方法来获取该学生的地址。

HQL检索

HQL(Hibernate Query Language)是一种基于对象的查询语言,它类似于SQL,但是更加面向对象。HQL使用Hibernate映射文件中的类和属性来构建查询。以下是一个使用HQL查询所有Student对象的例子:

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Query query = session.createQuery("from Student");
List<Student> students = query.list();
session.getTransaction().commit();
Nach dem Login kopieren

在上面的例子中,我们使用createQuery()方法创建一个HQL查询,然后使用list()方法获取结果列表。

QBC检索

QBC(Query By Criteria)是一种基于对象的查询方式,它使用Criteria API来构建查询。使用Criteria API可以避免一些常见的查询错误,因为它是一种类型安全的查询方式。下面是一个使用QBC查询所有Student对象的例子:

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Criteria criteria = session.createCriteria(Student.class);
List<Student> students = criteria.list();
session.getTransaction().commit();
Nach dem Login kopieren

在上面的例子中,我们使用createCriteria()方法创建一个Criteria对象,并使用list()方法获取结果列表。

SQL检索

尽管Hibernate支持多种基于对象的查询方式,但有些情况下我们可能需要执行一些复杂的SQL查询。在这种情况下,我们可以使用SQL查询来检索数据。以下是一个使用SQL查询所有Student对象的例子:

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
SQLQuery query = session.createSQLQuery("select * from Student");
query.addEntity(Student.class);
List<Student> students = query.list();
session.getTransaction().commit();
Nach dem Login kopieren

在上面的例子中,我们使用createSQLQuery()方法创建一个SQL查询,并使用addEntity()方法将结果映射到Student类。

抓取策略

抓取策略是Hibernate用来处理对象关系的机制。Hibernate提供了三种数据提取方式:立即提取、延迟提取和批量提取。

立即抓取

当检索一个对象时,立即抓取是指Hibernate会立即检索该对象的所有关联对象。这种抓取策略会导致性能问题,因为它可能会导致大量的数据传输。以下是一个使用立即抓取的例子:

@ManyToOne(fetch = FetchType.EAGER)
private Address address;
Nach dem Login kopieren

在上面的例子中,我们将fetch属性设置为EAGER,表示使用立即抓取。

延迟抓取

Hibernate的延迟抓取指的是只检索实体本身,并不会检索关联实体。当我们需要访问相关对象时,Hibernate将再次查询这些对象。这种抓取策略可以提高性能,因为它避免了不必要的数据传输。以下是一个使用延迟抓取的例子:

@ManyToOne(fetch = FetchType.LAZY)
private Address address;
Nach dem Login kopieren

在上面的例子中,我们将fetch属性设置为LAZY,表示使用延迟抓取。

批量抓取

批量抓取是一种抓取策略,它允许我们一次性检索多个对象的关联对象。这种抓取策略可以提高性能,因为它减少了多次检索的次数。以下是一个使用批量抓取的例子:

@OneToMany(mappedBy = "student", fetch = FetchType.LAZY)
@BatchSize(size = 10)
private List<Grade> grades;
Nach dem Login kopieren

在上面的例子中,我们将@BatchSize注解添加到@OneToMany注解中,表示使用批量抓取。

延迟加载

Hibernate中的延迟加载意味着只有在需要时才会加载与对象相关联的其他对象。这种机制可以减少不必要的数据传输,提高性能。以下是一个使用延迟加载的例子:

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Student student = (Student) session.load(Student.class, 1);
Address address = student.getAddress();
session.getTransaction().commit();
Nach dem Login kopieren

在上面的例子中,我们使用load()方法检索一个ID为1的Student对象,并使用getAddress()rrreee

Im obigen Beispiel haben wir eine ID mithilfe von get() abgerufen Methode Student-Objekt von 1. #🎜🎜##🎜🎜#Objektnavigationsabruf#🎜🎜##🎜🎜#Objektnavigationsabruf ermöglicht es uns, Daten über die Beziehungen zwischen Objekten abzurufen. Wenn wir beispielsweise eine Student-Klasse und eine Address-Klasse haben und zwischen ihnen eine Eins-zu-eins-Beziehung besteht, können wir den Objektnavigationsabruf verwenden, um die Adresse eines bestimmten Student-Objekts abzurufen. Das Folgende ist ein Beispiel für den Abruf mithilfe der Objektnavigation: #🎜🎜#rrreee#🎜🎜#Im obigen Beispiel rufen wir das Student-Objekt ab und verwenden die Methode getAddress(), um die Adresse des Studenten abzurufen . #🎜🎜##🎜🎜#HQL Retrieval#🎜🎜##🎜🎜#HQL (Hibernate Query Language) ist eine objektbasierte Abfragesprache, die SQL ähnelt, jedoch objektorientierter ist. HQL verwendet Klassen und Eigenschaften aus Hibernate-Zuordnungsdateien, um Abfragen zu erstellen. Das Folgende ist ein Beispiel für die Verwendung von HQL zum Abfragen aller Student-Objekte: #🎜🎜#rrreee#🎜🎜#Im obigen Beispiel verwenden wir die Methode createQuery(), um eine HQL-Abfrage zu erstellen, und dann Verwenden Sie die Methode list(), um die Ergebnisliste abzurufen. #🎜🎜##🎜🎜#QBC Retrieval#🎜🎜##🎜🎜#QBC (Query By Criteria) ist eine objektbasierte Abfragemethode, die die Kriterien-API zum Erstellen von Abfragen verwendet. Durch die Verwendung der Kriterien-API können einige häufige Abfragefehler vermieden werden, da es sich um eine typsichere Abfragemethode handelt. Das Folgende ist ein Beispiel für die Verwendung von QBC zum Abfragen aller Student-Objekte: #🎜🎜#rrreee#🎜🎜#Im obigen Beispiel verwenden wir die Methode createCriteria(), um ein Criteria-Objekt zu erstellen und verwenden Die Methode list() ruft die Ergebnisliste ab. #🎜🎜##🎜🎜#SQL-Abruf#🎜🎜##🎜🎜#Obwohl Hibernate eine Vielzahl objektbasierter Abfragemethoden unterstützt, müssen wir in einigen Fällen möglicherweise einige komplexe SQL-Abfragen durchführen. In diesem Fall können wir eine SQL-Abfrage verwenden, um die Daten abzurufen. Das Folgende ist ein Beispiel für die Abfrage aller Student-Objekte mithilfe von SQL: #🎜🎜#rrreee#🎜🎜#Im obigen Beispiel verwenden wir die Methode createSQLQuery(), um eine SQL-Abfrage zu erstellen und Die Methode addEntity() ordnet das Ergebnis der Klasse Student zu. #🎜🎜##🎜🎜#Crawl-Strategie#🎜🎜##🎜🎜#Die Crawl-Strategie ist der Mechanismus, den Hibernate zum Umgang mit Objektbeziehungen verwendet. Hibernate bietet drei Datenextraktionsmethoden: sofortige Extraktion, verzögerte Extraktion und Batch-Extraktion. #🎜🎜##🎜🎜#Sofort fangen#🎜🎜##🎜🎜#Beim Abrufen eines Objekts bedeutet das sofortige Greifen, dass Hibernate sofort alle zugehörigen Objekte des Objekts abruft. Diese Crawling-Strategie kann zu Leistungsproblemen führen, da große Datenmengen übertragen werden können. Das Folgende ist ein Beispiel für die Verwendung des sofortigen Abrufs: #🎜🎜#rrreee#🎜🎜#Im obigen Beispiel setzen wir das fetch-Attribut auf EAGER, was die Verwendung von „Sofort“ bedeutet Greifen. #🎜🎜##🎜🎜#Verzögerter Abruf#🎜🎜##🎜🎜#Der verzögerte Abruf von Hibernate bezieht sich darauf, dass nur die Entität selbst und nicht die zugehörigen Entitäten abgerufen werden. Wenn wir auf verwandte Objekte zugreifen müssen, fragt Hibernate diese Objekte erneut ab. Diese Crawling-Strategie verbessert die Leistung, da unnötige Datenübertragungen vermieden werden. Das Folgende ist ein Beispiel für die Verwendung von Lazy Fetching: #🎜🎜#rrreee#🎜🎜#Im obigen Beispiel setzen wir das Attribut fetch auf LAZY, was die Verwendung von anzeigt verzögern Grab. #🎜🎜##🎜🎜#Batch-Crawling#🎜🎜##🎜🎜#Batch-Crawling ist eine Crawling-Strategie, die es uns ermöglicht, verknüpfte Objekte mehrerer Objekte gleichzeitig abzurufen. Diese Crawling-Strategie verbessert die Leistung, da sie die Anzahl mehrfacher Abrufe reduziert. Das Folgende ist ein Beispiel für die Verwendung des Stapelabrufs: #🎜🎜#rrreee#🎜🎜#Im obigen Beispiel fügen wir die Annotation @BatchSize zur Annotation @OneToMany hinzu. Zeigt die Verwendung von Batch-Crawling an. #🎜🎜##🎜🎜#Lazy Loading#🎜🎜##🎜🎜#Lazy Loading im Ruhezustand bedeutet, dass andere mit einem Objekt verknüpfte Objekte nur bei Bedarf geladen werden. Dieser Mechanismus kann unnötige Datenübertragungen reduzieren und die Leistung verbessern. Das Folgende ist ein Beispiel für die Verwendung von Lazy Loading: #🎜🎜#rrreee#🎜🎜#Im obigen Beispiel verwenden wir die Methode load(), um ein Student-Objekt mit der ID 1 abzurufen und verwenden getAddress() ermittelt die Adresse des Schülers. Da wir Lazy Loading verwenden, lädt Hibernate das Adressobjekt nur bei Bedarf. #🎜🎜#

Das obige ist der detaillierte Inhalt vonSo verwenden Sie die Abfragestrategie und die Crawling-Strategie in Java Hibernate. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Quadratwurzel in Java Quadratwurzel in Java Aug 30, 2024 pm 04:26 PM

Leitfaden zur Quadratwurzel in Java. Hier diskutieren wir anhand eines Beispiels und seiner Code-Implementierung, wie Quadratwurzel in Java funktioniert.

Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Zufallszahlengenerator in Java Zufallszahlengenerator in Java Aug 30, 2024 pm 04:27 PM

Leitfaden zum Zufallszahlengenerator in Java. Hier besprechen wir Funktionen in Java anhand von Beispielen und zwei verschiedene Generatoren anhand ihrer Beispiele.

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Armstrong-Zahl in Java Armstrong-Zahl in Java Aug 30, 2024 pm 04:26 PM

Leitfaden zur Armstrong-Zahl in Java. Hier besprechen wir eine Einführung in die Armstrong-Zahl in Java zusammen mit einem Teil des Codes.

Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

See all articles