Annotation @Repository Spring

Primavera A anotação @Repository é usada para indicar que a classe fornece o mecanismo para armazenamento, recuperação, busca, atualização e exclusão de objetos.

Primavera @Repository Anotação

A anotação do Repositório da Primavera é uma especialização da anotação @Component, portanto, as classes do Repositório da Primavera são detectadas automaticamente pelo framework Spring por meio da varredura do classpath. O Repositório da Primavera é muito próximo do padrão DAO, onde as classes DAO são responsáveis por fornecer operações CRUD em tabelas de banco de dados. No entanto, se você estiver usando Spring Data para gerenciar operações de banco de dados, você deve usar a interface do Repositório de Dados da Primavera.

Exemplo de Repositório da Primavera

Vamos dar uma olhada em um exemplo simples onde iremos criar uma classe Spring Repository. Não iremos usar operações de banco de dados, mas sim fornecer um repositório para um Objeto. Crie um projeto maven no Eclipse ou em qualquer outro IDE que você use, e então adicione a dependência do spring core.

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>5.0.6.RELEASE</version>
</dependency>

A imagem abaixo mostra a estrutura final do nosso projeto no Eclipse. Vamos criar a classe modelo para a qual implementaremos um repositório Spring.

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

Antes de implementarmos a classe Repository, eu criei uma interface genérica ObjectRepository para fornecer o contrato para nossa classe de repositório implementar.

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

}

Observe que estou usando um Map em memória para armazenar os dados do objeto, você também pode usar outros mecanismos.

Teste de Repositório Spring

Nosso Repositório Spring está pronto, vamos criar uma classe principal e testá-la.

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

		// delete
		Employee editor = repository.delete(2);
		System.out.println(editor);

		// feche o contexto spring
		context.close();
	}

}

Basta executar a classe como Aplicação Java e você deve obter a seguinte saída.

1,Pankaj,CEO
3,Meghna,CFO
2,Anupam,Editor

Você pode baixar o código de exemplo do nosso Repositório GitHub.

Referência: Documentação da API

Source:
https://www.digitalocean.com/community/tutorials/spring-repository-annotation