스프링 데이터는 반복되는 CRUD 코드를 획기적으로 줄여주고, 다양한 영속성 기술(RDBMS, NoSQL 등)을 공통된 방식으로 다룰 수 있게 해주는 강력한 라이브러리입니다.
스프링 데이터는 앱의 영속성 기능을 정의하기 위해 확장(extends)해야 하는 공통 인터페이스 계약을 제공합니다.
public class Account {
@Id
private long id;
private String name;
private BigDecimal amount;
//getter setter 생략
}
public interface AccountRepository
extends CrudRepository<Account, Long//엔티티, 기본키 타입> {
}
스프링 데이터는 SQL을 직접 작성하지 않아도 메서드 이름을 해석하여 자동으로 쿼리를 생성해 줍니다.
findAccountByName(String name)SELECT 절로 변환됩니다.FROM account)을 지정합니다.WHERE name = ?)을 지정합니다.public interface AccountRepository extends CrudRepository<Account, Long> {
List<Account> findAccountsByName(String name);
}
메서드 이름이 지나치게 길어지거나 성능 최적화가 필요한 경우, @Query를 통해 SQL을 직접 명시할 수 있습니다.
UPDATE, INSERT, DELETE와 같이 데이터를 변경하는 쿼리를 사용할 때는 반드시 이 애너테이션을 함께 추가해야 합니다.public interface AccountRepository extends CrudRepository<Account, Long> {
@Query("SELECT * FROM account WHERE name = :name")
//쿼리의 매개변수 이름은 메서드 매개변수 이름과 동일해야 한다.
//콜론(:)과 매개변수 이름 사이에 공백이 없어야 한다.
List<Account> findAccountsByName(String name);
}
public interface AccountRepository extends CrudRepository<Account, Long> {
@Query("SELECT * FROM account WHERE name = :name")
List<Account> findAccountsByName(String name);
@Modifying //데이터를 변경하는 연산을 정의하는 메서드에 @Modifying 애너테이션을 추가한다.
@Query("UPDATE account SET amount = :amount WHERE id = :id")
void changeAmount(long id, BigDecimal amount);
}
#Spring #SpringData #SpringDataJDBC #Repository #CrudRepository #QueryMethod #백엔드공부