스프링 빈 컨테이너에서 관리한다는 것은 개발자가 직접 인스턴스를 생성하지 않는다는 것을 의미합니다.
스프링 빈 컨테이너가 인스턴스를 생성해 관리한다는 것을 뜻합니다.
스프링 빈 컨테이너가 CalculatorService클래스를 찾아 빈으로 등록할 수 있도록 클래스 위에 @Component를 붙입니다.
스프링 빈 컨테이너를 사용할 때는 개발자가 직접 인스턴스를 생성하면 안됩니다.
@Mapper
@Select("SELECT * FROM xxx WHERE xxx")
@Update("UPDATE xxx SET xxx WHERE xxx")
@Results(id = "xxx", value = {
@Result(property = "xxx", column = "xxx"),
@Result(
property = "xxx",
column = "xxx",
javaType = xxx.class,
one = @One(select = "xxx", fetchType = FetchType.EAGER)
many = @Many(select = "xxx")
)
})
@Param("xxx") String xxx
@Delete("DELETE FROM xxx WHERE xxx")
@ResultMap("xxx")
@Mapper
- Spring IoC 컨테이너에 서비스 Bean으로 등록되며 Service단에서 Autowired하여 사용할 수 있음
- 메서드명은 추후 Mapper.xml 파일의 id와 동일하게 매핑시켜 편리하게 사용
- 해당 인터페이스에 등록된 SQL Annotation을 토대로 실제 SQL문을 실행시켜 준다.
- 3이상 버전부터 mapper.xml 대신 interface 클래스의 Annotation을 통해 SQL을 사용할 수 있다.
@Select("SELECT * FROM xxx WHERE xxx")
- ${ }는 Key를 나타내는 것으로써 '' 같은 싱글 쿼테이션이 들어가지 않으며,
- #{ }는 Value를 나타내는 것으로 싱글쿼테이션으로 감싸진다.
@Update("UPDATE xxx SET xxx WHERE xxx")
@Results(id = "xxx", value = {
@Result(property = "xxx", column = "xxx"),
@Result(
property = "xxx",
column = "xxx",
javaType = xxx.class,
one = @One(select = "xxx", fetchType = FetchType.EAGER)
many = @Many(select = "xxx")
)
})
- DB의 칼럼명칭과 Java 에서 만든 class의 변수명이 일치하지 않는 경우가 있을 때, SQL Mapper인 MyBatis를 사용해서 SQL 문법을 만들 떄 직접 매핑을 시켜주는 코드
@Param("xxx") String xxx
@Delete("DELETE FROM xxx WHERE xxx")
@ResultMap("xxx")
- 매핑이 필요한 SQL 메서드 ID 선언
- 해당 메서드를 불러올 때 xxx 테이블의 칼럼과 property가 서로 매핑되어서 정확한 데이터를 가져오게 됨
@Repository
@Query("SELECT * FROM xxx WHERE xxx")
@Transactional
@Modifying
@Repository
- JPA에서의 DB Layer 접근자를 의미한다.
- 인터페이스를 생성 후 JpaRepository<Entity 클래스, PK 타입>을 상속하면 기본적인 CRUD 메소드가 자동으로 생성된다.
- @Repository를 추가할 필요가 없다.
- JPA 처리를 담당하는 Repository는 기본적으로 4가지가 있다. (T : Entity의 타입클래스, ID : P.K 값의 Type)
- Repository<T, ID>
- CrudRepository<T, ID>
- PagingAndSortingRepository<T, ID>
- JpaRepository<T, ID>
@Query("SELECT * FROM xxx WHERE xxx")
- 실행할 메서드 위에 정적 쿼리를 작성 한다.
- JpaRepository 를 상속하는 인터페이스에서 사용한다.
- Spring Data JPA에서는 기본적으로 JpaRepository를 통해서 제공되는 findById와 같은 메서드도 있고, 메서드 네이밍만을 통해서 쿼리를 실행할 수 있도록 기능을 제공해주고 있다. 하지만, 이 두가지 방법으로도 만들 수 없는 쿼리가 필요하다면, 쿼리를 직접 작성해야 한다. 그 때 커스텀 Reopository의 메서드에 붙이는 annotation이다. 기본적으로는 JPQL로 작성할 수 있고, nativeQuery=true 옵션으로 네이티브 쿼리도 사용 가능하다.
@Modifying
- @Query Annotation으로 작성 된 변경, 삭제 쿼리 메서드를 사용할 때 필요함
- 조회 쿼리를 제외하고, 데이터에 변경이 일어나는 INSERT, UPDATE, DELETE, DDL 에서 사용
- 주로 벌크 연산 시에 사용됨(기본적으로 제공되는 쿼리 메서드나 메서드 네이밍으로 파생되는 쿼리 메서드에서는 적용이 되지 않음)
- JPA Entity LifeCycle을 무시하고 쿼리가 실행되기 때문에 해당 annotation을 사용할 때는 영속성 콘텍스트 관리에 주의해야 함. => clearAutomatically, flushAutomatically를 통해 간단하게 해결할 수 있음
- https://velog.io/@dnjscksdn98/JPA-Hibernate-Spring-Data-JPA-Modifying
'두두의 IT > Spring' 카테고리의 다른 글
개발 프로세스 (비즈니스 요구사항, 설계) (0) | 2022.10.13 |
---|---|
Spring Boot Junit5 (0) | 2022.06.23 |
Spring Boot Service Annotation (0) | 2022.05.23 |
Spring Boot Main Annotation (0) | 2022.05.23 |
Spring Boot Git Open Source (0) | 2022.05.20 |