ホームページ  >  記事  >  Java  >  Java Hibernate でクエリ戦略とクローリング戦略を使用する方法

Java Hibernate でクエリ戦略とクローリング戦略を使用する方法

王林
王林転載
2023-05-25 11:21:08564ブラウズ

オブジェクト指向メソッドを使用したデータベースへのアクセスは、人気のある ORM フレームワークである Hibernate によって提供されます。 Hibernate では、OID クエリ、オブジェクト ナビゲーションの取得、HQL の取得、QBC の取得、SQL の取得など、さまざまなクエリ メソッドを使用してデータを取得できます。

OID クエリ

OID (オブジェクト識別子) は、Hibernate の各永続オブジェクトの一意の識別子です。 OID クエリを使用して、特定の永続オブジェクトを取得できます。 OID クエリを使用する場合は、load() または get() メソッドを使用する必要があります。これら 2 つのメソッドの違いは、load() メソッドは必要に応じてオブジェクトをロードするのに対し、get() メソッドはオブジェクトを即座にロードすることです。以下は、get() メソッドの使用例です。

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

上の例では、get() メソッドを使用して ID を持つ Student を取得します。 1 つのオブジェクト。

オブジェクト ナビゲーションの取得

オブジェクト ナビゲーションの取得を使用すると、オブジェクト間の関係を通じてデータを取得できます。たとえば、Student クラスと Address クラスがあり、それらの間に 1 対 1 の関係がある場合、オブジェクト ナビゲーションの取得を使用して、特定の Student オブジェクトのアドレスを取得できます。以下は、オブジェクト ナビゲーションを使用した取得の例です。

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

上の例では、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();

上記の例では、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();

上の例では、

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();

上記の例では、

createSQLQuery() メソッドを使用して SQL クエリを作成し、addEntity() を使用します。 メソッドは結果を Student クラスにマップします。

フェッチ戦略

フェッチ戦略は、オブジェクトの関係を処理するために Hibernate によって使用されるメカニズムです。 Hibernate は、即時抽出、遅延抽出、バッチ抽出という 3 つのデータ抽出方法を提供します。

即時取得

オブジェクトを取得する場合、「即時取得」とは、Hibernate がそのオブジェクトに関連付けられているすべてのオブジェクトを即座に取得することを意味します。このクロール戦略では大量のデータが転送される可能性があるため、パフォーマンスの問題が発生する可能性があります。次に、即時フェッチの使用例を示します。

@ManyToOne(fetch = FetchType.EAGER)
private Address address;

上記の例では、

fetch 属性を EAGER に設定し、即時フェッチの使用を示します。

遅延フェッチ

Hibernate の遅延フェッチとは、エンティティ自体の取得のみを指し、関連するエンティティの取得は行いません。関連オブジェクトにアクセスする必要がある場合、Hibernate はこれらのオブジェクトを再度クエリします。このクロール戦略により、不必要なデータ転送が回避されるため、パフォーマンスが向上します。以下は遅延フェッチの使用例です。

@ManyToOne(fetch = FetchType.LAZY)
private Address address;

上記の例では、

fetch 属性を LAZY に設定し、遅延フェッチの使用を示します。

バッチ クロール

バッチ クロールは、複数のオブジェクトの関連オブジェクトを一度に取得できるクロール戦略です。このクローリング戦略により、複数の取得の数が減るため、パフォーマンスが向上します。以下はバッチフェッチの使用例です。

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

上記の例では、

@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();

上記の例では、

load() メソッドを使用して ID 1 の Student オブジェクトを取得し、getAddress を使用します。 ( ) メソッドを使用して学生の住所を取得します。遅延ロードを使用しているため、Hibernate は必要な場合にのみアドレス オブジェクトをロードします。

以上がJava Hibernate でクエリ戦略とクローリング戦略を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。