@Repository 어노테이션

스프링 @Repository 주석은 클래스가 객체에 대한 저장, 검색, 업데이트 및 삭제 작업을 제공하는 메커니즘을 제공함을 나타내는 데 사용됩니다.

스프링 @Repository 주석

스프링 Repository 주석은 @Component 주석의 특화된 형태이며, 따라서 스프링 Repository 클래스는 클래스패스 스캔을 통해 스프링 프레임워크에 의해 자동으로 감지됩니다. 스프링 Repository는 DAO 패턴과 매우 유사하며, DAO 클래스는 데이터베이스 테이블에 대한 CRUD 작업을 담당합니다. 그러나 데이터베이스 작업을 관리하기 위해 스프링 데이터를 사용하는 경우, 스프링 데이터 Repository 인터페이스를 사용해야 합니다.

스프링 Repository 예제

간단한 예제를 살펴보겠습니다. Spring Repository 클래스를 생성할 것입니다. 데이터베이스 작업을 사용하지 않고 객체에 대한 저장소를 제공할 것입니다. Eclipse나 다른 사용하는 IDE에서 메이븐 프로젝트를 생성한 다음, 스프링 코어 의존성을 추가하세요.

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

아래 이미지는 Eclipse에서 최종 프로젝트 구조를 보여줍니다. 스프링 저장소를 구현할 모델 클래스를 생성해보겠습니다.

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

Repository 클래스를 구현하기 전에, 일반적인 ObjectRepository 인터페이스를 생성하여 저장소 클래스가 구현해야 하는 계약을 제공합니다.

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

}

객체 데이터를 저장하기 위해 인메모리 Map을 사용하고 있음을 유의하세요. 다른 메커니즘을 사용할 수도 있습니다.

스프링 저장소 테스트

스프링 저장소가 준비되었습니다. 메인 클래스를 생성하고 테스트해보겠습니다.

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

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

		// 스프링 컨텍스트 종료
		context.close();
	}

}

Java Application으로 클래스를 실행하면 다음과 같은 출력을 얻을 수 있습니다.

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

예제 코드는 GitHub 저장소에서 다운로드할 수 있습니다.

참고: API 문서

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