Heim > Java > javaLernprogramm > Hauptteil

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

王林
Freigeben: 2023-05-25 11:21:08
nach vorne
502 Leute haben es durchsucht

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!

Verwandte Etiketten:
Quelle:yisu.com
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!