De Spring @Repository annotatie wordt gebruikt om aan te geven dat de klasse de mechanismen biedt voor opslag, ophalen, zoeken, bijwerken en verwijderen van objecten.
Spring @Repository Annotation
De Spring Repository-annotatie is een specialisatie van de @Component-annotatie, dus Spring Repository-klassen worden automatisch gedetecteerd door het Spring-framework via klassenpadscanning. Spring Repository lijkt sterk op het DAO-patroon waar DAO-klassen verantwoordelijk zijn voor het bieden van CRUD-operaties op database tabellen. Als je echter Spring Data gebruikt voor het beheren van databasebewerkingen, moet je de Spring Data Repository-interface gebruiken.
Voorbeeld van Spring Repository
Laten we eens kijken naar een eenvoudig voorbeeld waar we een Spring Repository-klasse zullen maken. We zullen geen databasebewerkingen gebruiken, maar eerder zullen we een repository bieden voor een Object. Maak een Maven-project in Eclipse of een andere IDE die je gebruikt, voeg dan de spring core-afhankelijkheid toe.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.6.RELEASE</version>
</dependency>
Onderstaande afbeelding toont onze uiteindelijke projectstructuur in Eclipse. Laten we de modelklasse maken waarvoor we een Spring-repository zullen implementeren.
package com.journaldev.spring.model;
public class Employee {
private int id;
private String name;
private String jobTitle;
public Employee() {
}
public Employee(int i, String n, String jt) {
this.id = i;
this.name = n;
this.jobTitle = jt;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getJobTitle() {
return jobTitle;
}
public void setJobTitle(String jobTitle) {
this.jobTitle = jobTitle;
}
@Override
public String toString() {
return id + "," + name + "," + jobTitle;
}
}
Voordat we de Repository-klasse implementeren, heb ik een generieke ObjectRepository
-interface gemaakt om het contract te bieden voor onze repositoryklasse om te implementeren.
package com.journaldev.spring.repository;
public interface ObjectRepository<T> {
public void store(T t);
public T retrieve(int id);
public T search(String name);
public T delete(int id);
}
I am using Generics here, it’s a powerful technology to provide loosely coupled contract for the applications to implement. Now let’s look at our Repository class implementation.
package com.journaldev.spring.repository;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.springframework.stereotype.Repository;
import com.journaldev.spring.model.Employee;
@Repository
public class EmployeeRepository implements ObjectRepository<Employee> {
private Map<Integer, Employee> repository;
public EmployeeRepository() {
this.repository = new HashMap<>();
}
@Override
public void store(Employee emp) {
repository.put(emp.getId(), emp);
}
@Override
public Employee retrieve(int id) {
return repository.get(id);
}
@Override
public Employee search(String name) {
Collection<Employee> emps = repository.values();
for (Employee emp : emps) {
if (emp.getName().equalsIgnoreCase(name))
return emp;
}
return null;
}
@Override
public Employee delete(int id) {
Employee e = repository.get(id);
this.repository.remove(id);
return e;
}
}
Merk op dat ik een in-memory Map gebruik om de objectgegevens op te slaan, je kunt ook andere mechanismen gebruiken.
Spring Repository Test
Onze Spring Repository is klaar, laten we een hoofdklasse maken en het testen.
package com.journaldev.spring;
import java.sql.SQLException;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import com.journaldev.spring.model.Employee;
import com.journaldev.spring.repository.EmployeeRepository;
public class SpringMainClass {
public static void main(String[] args) throws SQLException {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.scan("com.journaldev.spring");
context.refresh();
EmployeeRepository repository = context.getBean(EmployeeRepository.class);
// store
repository.store(new Employee(1, "Pankaj", "CEO"));
repository.store(new Employee(2, "Anupam", "Editor"));
repository.store(new Employee(3, "Meghna", "CFO"));
// retrieve
Employee emp = repository.retrieve(1);
System.out.println(emp);
// search
Employee cfo = repository.search("Meghna");
System.out.println(cfo);
// verwijderen
Employee editor = repository.delete(2);
System.out.println(editor);
// sluit de Spring-context
context.close();
}
}
Voer gewoon de klasse uit als Java-toepassing en je zou het volgende resultaat moeten krijgen.
1,Pankaj,CEO
3,Meghna,CFO
2,Anupam,Editor
Je kunt de voorbeeldcode downloaden van onze GitHub Repository.
Referentie: API-documentatie
Source:
https://www.digitalocean.com/community/tutorials/spring-repository-annotation