> Java > java지도 시간 > 본문

Java Hibernate에서 쿼리 전략 및 크롤링 전략을 사용하는 방법

王林
풀어 주다: 2023-05-25 11:21:08
앞으로
579명이 탐색했습니다.

객체 지향 방법을 사용하여 데이터베이스에 액세스하는 기능은 널리 사용되는 ORM 프레임워크인 Hibernate에서 제공됩니다. Hibernate에서는 OID 쿼리, 객체 탐색 검색, HQL 검색, QBC 검색 및 SQL 검색을 포함하여 다양한 쿼리 방법을 사용하여 데이터를 검색할 수 있습니다.

OID Query

OID(Object Identifier)는 Hibernate에 있는 각 영속 객체의 고유 식별자입니다. OID 쿼리를 사용하여 특정 영구 객체를 검색할 수 있습니다. OID 쿼리를 사용할 때는 load() 또는 get() 메서드를 사용해야 합니다. 이 두 메서드의 차이점은 load() 메서드는 필요할 때 개체를 로드하는 반면, get() 메서드는 개체를 즉시 로드한다는 것입니다. 다음은 get() 메서드를 사용하는 예입니다. load()get()方法。这两个方法的区别在于,load()方法会在需要时才加载对象,而get()方法会立即加载对象。下面是一个使用get()方法的例子:

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Student student = (Student) session.get(Student.class, 1);
session.getTransaction().commit();
로그인 후 복사

在上面的例子中,我们使用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();
로그인 후 복사

在上面的例子中,我们通过检索一个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提供了三种数据提取方式:立即提取、延迟提取和批量提取。

立即抓取

当检索一个对象时,立即抓取是指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()rrreee

위 예에서는 get() 메서드를 사용하여 ID 1의 Student 개체를 검색했습니다. . 🎜🎜객체 탐색 검색🎜🎜객체 탐색 검색을 사용하면 객체 간의 관계를 통해 데이터를 검색할 수 있습니다. 예를 들어 Student 클래스와 Address 클래스가 있고 둘 사이에 일대일 관계가 있는 경우 개체 탐색 검색을 사용하여 특정 Student 개체의 주소를 검색할 수 있습니다. 다음은 개체 탐색을 사용한 검색의 예입니다. 🎜rrreee🎜위의 예에서는 Student 개체를 검색하고 getAddress() 메서드를 사용하여 학생의 주소를 가져옵니다. 🎜🎜HQL 검색🎜🎜HQL(Hibernate Query Language)은 객체 기반 쿼리 언어로 SQL과 유사하지만 더 객체 지향적입니다. HQL은 쿼리를 작성하기 위해 Hibernate 매핑 파일의 클래스와 속성을 사용합니다. 다음은 HQL을 사용하여 모든 Student 개체를 쿼리하는 예입니다. 🎜rrreee🎜 위 예에서는 createQuery() 메서드를 사용하여 HQL 쿼리를 생성한 다음 list( )결과 목록을 가져오는 메서드입니다. 🎜🎜QBC Retrieval🎜🎜QBC(Query By Criteria)는 Criteria API를 사용하여 쿼리를 작성하는 개체 기반 쿼리 방법입니다. Criteria API를 사용하면 유형이 안전한 쿼리 방법이므로 몇 가지 일반적인 쿼리 오류를 피할 수 있습니다. 다음은 QBC를 사용하여 모든 Student 개체를 쿼리하는 예입니다. 🎜rrreee🎜위 예에서는 createCriteria() 메서드를 사용하여 Criteria 개체를 만들고 list()를 사용합니다. code >결과 목록을 가져오는 방법입니다. 🎜🎜SQL 검색🎜🎜Hibernate는 다양한 객체 기반 쿼리 방법을 지원하지만 경우에 따라 복잡한 SQL 쿼리를 수행해야 할 수도 있습니다. 이 경우 SQL 쿼리를 사용하여 데이터를 검색할 수 있습니다. 다음은 SQL을 사용하여 모든 Student 개체를 쿼리하는 예입니다. 🎜rrreee🎜위 예에서는 createSQLQuery() 메서드를 사용하여 SQL 쿼리를 생성하고 addEntity()를 사용합니다. >방법은 결과를 Student 클래스에 매핑합니다. 🎜🎜Fetching strategy🎜🎜Fetching strategy은 Hibernate가 객체 관계를 처리하기 위해 사용하는 메커니즘입니다. Hibernate는 즉시 추출, 지연 추출, 배치 추출의 세 가지 데이터 추출 방법을 제공합니다. 🎜🎜즉시 가져오기🎜🎜객체를 검색할 때 즉시 가져오기는 Hibernate가 객체와 관련된 모든 객체를 즉시 검색한다는 의미입니다. 이 크롤링 전략으로 인해 대량의 데이터가 전송될 수 있으므로 성능 문제가 발생할 수 있습니다. 다음은 즉시 가져오기를 사용하는 예입니다. 🎜rrreee🎜위 예에서는 fetch 속성을 ​​EAGER로 설정했는데, 이는 즉시 가져오기를 사용한다는 의미입니다. 🎜🎜지연된 가져오기🎜🎜Hibernate의 지연된 가져오기는 엔터티 자체만 검색하고 관련 엔터티는 검색하지 않음을 의미합니다. 우리가 관련된 객체에 접근해야 할 때, Hibernate는 이들 객체를 다시 쿼리할 것입니다. 이 크롤링 전략은 불필요한 데이터 전송을 방지하므로 성능이 향상됩니다. 다음은 지연 가져오기 사용 예입니다. 🎜rrreee🎜위 예에서는 fetch 속성을 ​​LAZY로 설정하여 지연 가져오기 사용을 나타냅니다. 🎜🎜일괄 크롤링🎜🎜일괄 크롤링은 여러 개체의 관련 개체를 한 번에 검색할 수 있는 크롤링 전략입니다. 이 크롤링 전략은 다중 검색 횟수를 줄이므로 성능을 향상시킵니다. 다음은 일괄 가져오기 사용 예시입니다. 🎜rrreee🎜위 예시에서는 @OneToMany 주석에 @BatchSize 주석을 추가하여 일괄 가져오기 사용을 나타냅니다. . 🎜🎜지연 로딩🎜🎜 Hibernate에서 지연 로딩은 객체와 연관된 다른 객체가 필요할 때만 로드된다는 것을 의미합니다. 이 메커니즘은 불필요한 데이터 전송을 줄이고 성능을 향상시킬 수 있습니다. 다음은 지연 로딩을 사용하는 예입니다. 🎜rrreee🎜위 예에서는 load() 메서드를 사용하여 ID 1의 Student 객체를 검색하고 getAddress()를 사용합니다. 코드> 코드> 메소드를 통해 학생의 주소를 가져옵니다. 지연 로딩을 사용하고 있기 때문에 Hibernate는 필요할 때만 주소 객체를 로드할 것입니다. 🎜

위 내용은 Java Hibernate에서 쿼리 전략 및 크롤링 전략을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿