Java >> Java tutorial >  >> Tag >> Spring

Alt hvad du behøver at vide om Spring Data JPA

I dette indlæg dækker jeg alt, hvad du behøver at vide om Spring Data JPA, så du kan bruge dette bibliotek mere trygt i din Spring Boot-applikation. Jeg har set, at der er meget forvirring om, hvornår man skal bruge CrudRepository eller JpaRepository , så det vil jeg også dække.

Hvad er Spring Data JPA?

Som den officielle dokumentation fra Spring siger "Spring Data JPA gør det nemt at implementere JPA-baserede repositories. Det forbedrer og letter implementeringen af ​​det JPA-baserede dataadgangslag. Samlet set er dataadgangsapplikationer nemmere at implementere.”

Med Spring Data JPA kan man undgå en masse boilerplate-kode til Java Persistent API (JPA) i applikationen. Biblioteket gør det også nemt at forespørge dataene fra databasen, hvilket fjerner en masse implementering af SQL-forespørgsler fra en udvikler.

Som udvikler skriver du kun lagergrænseflader, inklusive eventuelle brugerdefinerede metoder, og Spring Data JPA vil automatisk levere mest mulig implementering.

Hvornår skal du bruge Spring Data JPA?

Hvornår du skal bruge Spring Data JPA afhænger faktisk af din use case. Men de fleste Spring-applikationer har brug for dataobjekter. Og hvis du har dataobjekter, skal du bruge en måde at få adgang til dem på og bruge dem til transaktioner.

Hvis du bygger en databasebaseret webapplikation, vil du ende med at skabe objekter, der repræsenterer dine databaseenheder. Når et lag får adgang til disse objekter eller opretter dataene til at gemme i databasen, skal du have adgangs-API'er. Du kan implementere repository grænseflader, og det vil give de grundlæggende CRUD-operationer. En programmør behøver ikke engang at implementere nogen af ​​disse grænseflademetoder.

Du kan også tilføje en brugerdefineret metode i disse lagergrænseflader.

  1. Opret en ny metode i grænsefladen
  2. Skriv JPQL-forespørgslen med en annotation @Query i begyndelsen af ​​forespørgslen.
  3. Man kan også skrive JPA navngivne forespørgsler

Nogle andre vigtige funktioner i Spring Data JPA er:

  1. Revision af domæneklasser
  2. Nyttig ved batch-indlæsning, dynamiske forespørgsler
  3. Understøttelse af XML-kortlægning af enheder

Detaljer om Spring Data JPA-biblioteket

I din ansøgning kan du nemt inkludere afhængigheden som følger:

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

For at aktivere dine JPA-lagre skal du tilføje følgende anmærkning til din hovedapplikationsklasse:

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

For nu at tilføje et lager for ethvert af dine domæneobjekter, kan du oprette en grænseflade, der udvider JpaRepository eller CrudRepository .

Dette vil se ud som nedenfor:


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

Som du kan se ovenfor, har vi tilføjet en ny grænseflade, der repræsenterer et domæneobjekt på Order . Jeg har også tilføjet en brugerdefineret metode findAllByCustomer . JPA Named Queries vil tage sig af implementeringen af ​​denne metode til at hente alle ordrer fra en kunde.

Konfiguration

Spring Boot konfigurerer Hibernate som standard JPA-udbyder. Hvis du vil tilpasse denne konfiguration eller ændre standard JPA-udbyderen, skal du oprette en entityManagerFactory bean i din fjederkonfiguration.


@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;
	}
}

Ovenstående kode viser, hvordan du tilføjer konfiguration, hvis du planlægger at tilpasse standarddvalekonfigurationen.

  • @EnableTransactionManagement – aktiverer transaktionerne i applikationen, især ved oprettelse eller opdatering af data.
  • @PropertySource – læser applikationsegenskaberne, der vil blive brugt i Datasource bean.

Som tidligere nævnt bruger Spring Boot Hibernate som standard persistensudbyder. Men der er få andre vedholdenhedsudbydere tilgængelige som OpenJPA eller EclipseLink.

Forskel mellem CrudRepository og JpaRepository

Vi har tidligere diskuteret om oprettelse af lagergrænseflader, der udvider JpaRepository eller CrudRepository . Men hvornår bruger du hvilken? I dette afsnit præciserer jeg flere detaljer om disse lagergrænseflader.

CrudRepository er basisgrænsefladen. JpaRepository udvider PagingAndSortingRepository som igen udvider CrudRepository .

  • CrudRepository – Dette giver CRUD-funktioner.
  • PagingAndSortingRepository – Dette giver funktioner til sorterbare og sidebare data.
  • JpaRepository – JpaRepository giver JPA-relaterede funktioner til at tømme persistenskonteksten samt slette data i en batch.

Kort sagt kan man bruge JpaRepository da det vil inkludere alle de andre metoder fra CrudRepository og PagingAndSortingRepository .

Konklusion

I dette indlæg viste jeg detaljerne i Spring Data JPA-biblioteket, og hvordan man bruger det. Jeg viste også konfigurationsdetaljer og hvilken lagergrænseflade der skulle bruges.


Java tag