Java >> Java Tutorial >  >> Tag >> Spring

Alles, was Sie über Spring Data JPA wissen müssen

In diesem Beitrag behandle ich alles, was Sie über Spring Data JPA wissen müssen, damit Sie diese Bibliothek sicherer in Ihrer Spring Boot-Anwendung verwenden können. Ich habe gesehen, dass es viel Verwirrung darüber gibt, wann CrudRepository verwendet werden soll oder JpaRepository , also werde ich auch darauf eingehen.

Was ist Spring Data JPA?

Wie die offizielle Dokumentation von Spring sagt:„Spring Data JPA macht es einfach, JPA-basierte Repositories zu implementieren. Es verbessert und vereinfacht die Implementierung der JPA-basierten Datenzugriffsschicht. Insgesamt sind Datenzugriffsanwendungen einfacher zu implementieren.“

Mit Spring Data JPA kann man viel Boilerplate-Code für Java Persistent API (JPA) in der Anwendung vermeiden. Die Bibliothek macht es auch einfach, die Daten aus der Datenbank abzufragen, was einem Entwickler einen Großteil der Implementierung für SQL-Abfragen abnimmt.

Als Entwickler schreiben Sie nur Repository-Schnittstellen, einschließlich benutzerdefinierter Methoden, und Spring Data JPA stellt die meisten Implementierungen automatisch bereit.

Wann sollte Spring Data JPA verwendet werden?

Wann Sie Spring Data JPA verwenden, hängt tatsächlich von Ihrem Anwendungsfall ab. Die meisten Spring-Anwendungen benötigen jedoch Datenobjekte. Und wenn Sie Datenobjekte haben, brauchen Sie eine Möglichkeit, auf sie zuzugreifen und sie für Transaktionen zu verwenden.

Wenn Sie eine datenbankbasierte Webanwendung erstellen, werden Sie am Ende Objekte erstellen, die Ihre Datenbankentitäten darstellen. Wenn eine Ebene auf diese Objekte zugreift oder die Daten zum Speichern in der Datenbank erstellt, benötigen Sie Zugriffs-APIs. Sie können repository implementieren Schnittstellen und stellt die grundlegenden CRUD-Operationen bereit. Ein Programmierer muss nicht einmal eine dieser Schnittstellenmethoden implementieren.

Sie können diesen Repository-Schnittstellen auch eine benutzerdefinierte Methode hinzufügen.

  1. Erstellen Sie eine neue Methode in der Schnittstelle
  2. Schreiben Sie die JPQL-Abfrage mit einer Anmerkung @Query am Anfang der Abfrage.
  3. Man kann auch benannte JPA-Abfragen schreiben

Einige andere Hauptmerkmale von Spring Data JPA sind:

  1. Prüfung von Domänenklassen
  2. Nützlich beim Stapelladen, dynamischen Abfragen
  3. Unterstützung für XML-Mapping von Entitäten

Details der Spring Data JPA-Bibliothek

In Ihrer Anwendung können Sie die Abhängigkeit einfach wie folgt einbinden:

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

Um nun Ihre JPA-Repositories zu aktivieren, fügen Sie Ihrer Hauptanwendungsklasse die folgende Anmerkung hinzu:

@EnableJpaRepositories(basePackages = "com.betterjavacode.modelmapperdemo")

Um nun ein Repository für eines Ihrer Domänenobjekte hinzuzufügen, können Sie eine Schnittstelle erstellen, die JpaRepository erweitert oder CrudRepository .

Dies sieht wie folgt aus:


@Repository
public interface OrderRepository extends JpaRepository<Order, Long>
{
    List findAllByCustomer (Customer customer);
}

Wie Sie oben sehen können, haben wir eine neue Schnittstelle hinzugefügt, die ein Domänenobjekt von Order darstellt . Ich habe auch eine benutzerdefinierte Methode findAllByCustomer hinzugefügt . JPA Named Queries kümmert sich um die Implementierung dieser Methode, um alle Bestellungen eines Kunden abzurufen.

Konfiguration

Spring Boot konfiguriert Hibernate als Standard-JPA-Anbieter. Wenn Sie diese Konfiguration anpassen oder den Standard-JPA-Anbieter ändern möchten, müssen Sie einen entityManagerFactory erstellen Bean in Ihrer Spring-Konfiguration.


@Configuration
@EnableTransactionManagement
@EnableJpaRepositories("com.betterjavacode.modelmapperdemo")
@PropertySource("classpath:application.properties")
public class DataConfig {

	private final String PROPERTY_DRIVER = "driver";
	private final String PROPERTY_URL = "url";
	private final String PROPERTY_USERNAME = "user";
	private final String PROPERTY_PASSWORD = "password";
	private final String PROPERTY_SHOW_SQL = "hibernate.show_sql";
	private final String PROPERTY_DIALECT = "hibernate.dialect";

	@Autowired
	Environment environment;

	@Bean
	LocalContainerEntityManagerFactoryBean entityManagerFactory() {
		LocalContainerEntityManagerFactoryBean lfb = new LocalContainerEntityManagerFactoryBean();
		lfb.setDataSource(dataSource());
		lfb.setPersistenceProviderClass(HibernatePersistence.class);
		lfb.setPackagesToScan("com.betterjavacode.modelmapperdemo");
		lfb.setJpaProperties(hibernateProps());
		return lfb;
	}

	@Bean
	DataSource dataSource() {
		DriverManagerDataSource ds = new DriverManagerDataSource();
		ds.setUrl(environment.getProperty(PROPERTY_URL));
		ds.setUsername(environment.getProperty(PROPERTY_USERNAME));
		ds.setPassword(environment.getProperty(PROPERTY_PASSWORD));
		ds.setDriverClassName(environment.getProperty(PROPERTY_DRIVER));
		return ds;
	}

	Properties hibernateProps() {
		Properties properties = new Properties();
		properties.setProperty(PROPERTY_DIALECT, environment.getProperty(PROPERTY_DIALECT));
		properties.setProperty(PROPERTY_SHOW_SQL, environment.getProperty(PROPERTY_SHOW_SQL));
		return properties;
	}

	@Bean
	JpaTransactionManager transactionManager() {
		JpaTransactionManager transactionManager = new JpaTransactionManager();
		transactionManager.setEntityManagerFactory(entityManagerFactory().getObject());
		return transactionManager;
	}
}

Der obige Code zeigt, wie Sie eine Konfiguration hinzufügen, wenn Sie die Standardkonfiguration für den Ruhezustand anpassen möchten.

  • @EnableTransactionManagement – ermöglicht die Transaktionen in der Anwendung, insbesondere beim Erstellen oder Aktualisieren der Daten.
  • @PropertySource – liest die Anwendungseigenschaften, die in der Datasource-Bean verwendet werden.

Wie bereits erwähnt, verwendet Spring Boot Hibernate als standardmäßigen Persistenzanbieter. Aber es gibt nur wenige andere Persistenzanbieter wie OpenJPA oder EclipseLink.

Unterschied zwischen CrudRepository und JpaRepository

Wir haben zuvor über das Erstellen von Repository-Schnittstellen gesprochen, die JpaRepository erweitern oder CrudRepository . Aber wann benutzt man welches? In diesem Abschnitt erläutere ich weitere Details zu diesen Repository-Schnittstellen.

CrudRepository ist die Basisschnittstelle. JpaRepository erweitert PagingAndSortingRepository was wiederum CrudRepository erweitert .

  • CrudRepository – Dies stellt CRUD-Funktionen bereit.
  • PagingAndSortingRepository – Bietet Funktionen für sortierbare und seitenweise Daten.
  • JpaRepository – JpaRepository bietet JPA-bezogene Funktionen zum Leeren des Persistenzkontexts sowie zum Löschen von Daten in einem Stapel.

Kurz gesagt, man kann JpaRepository verwenden da es alle anderen Methoden von CrudRepository enthält und PagingAndSortingRepository .

Schlussfolgerung

In diesem Beitrag habe ich die Details der Spring Data JPA-Bibliothek und deren Verwendung gezeigt. Ich habe auch Konfigurationsdetails gezeigt und welche Repository-Schnittstelle verwendet werden soll.


Java-Tag