반응형
인프런 스프링-입문-스프링부트(김영한) 을 듣고 정리한 내용
dispatcherservlet -> controller 검색 후 view resolver(template엔진사용)에게 -> 없으면 resource 검색 -> 반환
브라우저 <-> 어플리케이션
MessageConverter, JsonConverter, StringConverter
@Service @Repository 사용안하고
@Configuration + @Bean으로 빈등록하면 -> 추후에 인터페이스로 클래스 바꾸기 쉽다
통합테스트시 DB데이터 비우기 위해 @Transactional 이용
(@Commit으로 저장할 수 있음)
JDBC -> JdbcTemplate -> JPA -> Spring-Data-JPA
JPA는 기술명세서
Hibernate는 JPA 구현체
Spring Data JPA는 JPA를 편하게쓰기 위한 모듈
JDBC -
신경쓰지말자...
JdbcTemplate (like Mybatis)
반복코드 제거
Datasource를 주입받은 JdbcTempate를 주입받기
private final JdbcTemplate jdbcTemplate;
public JdbcTemplateRepository(Datasource datasource) {
jdbcTemplate = new JdbcTemplate(datasource);
}
...
public Optional<Member> findBy(Long id) {
List<Member> resuult = jdbcTemplate.qurey("select쿼리", mapper(), id);
return result.stream().findAny();
}
//new RowMapper<>를 통해 변환하도록
private RowMapper<Member> mapper() {
return (rs, rowNum) -> {
Member member = new Member();
member.setId(rs.getLong("id"));
member.setName(rs.getString("name"));
return member;
}
}
public Member save(Member member) {
SimpleJdbcInsert jdbcIsert = new SimpleJdbcInsert(jdbcTemplate);
jdbcIsert.withTableName("member").usingGeneratedKeyColumns("id");
Map<String, Object> parameters = new HasMap<>();
parameters.pub("name", member.getName());
Number key = jdbcIsert.excuteAndRetrunKey(new MapSqlParameterSource(parameters));
member.setId(key.longValue());
return members;
}
JPA
EntityManager를 주입받아 사용
EntityManager em;
...
em.persist();em.find(클래스, id);em.createQuery(쿼리, 클래스).getResultList();
Spring-Data-JPA
extends JpaRepository<Class, Id>를 사용시 아래의 인터페이스를 통해 쉽게 JPA 사용가능
- CrudRepository
- PagingAndSortingRepository
- JpaRepository
AOP
@Component
@Aspect
public class TimeTraceAop {
@Around("execute(* pachage ..*(..))")
public Object execute(ProceedingJoinPoint jP) throws Throwable {
long start = System.currrentTimeMillis();
try {
return jP.proceed();
} finally {
long finish = System.currrentTimeMillis();
long timeMs = finish - start;
}
}
}
임의의 프록시를 생성한 다음, 실행시 jP.proceed()에서 원래를 실행
혹은 컴파일 시, 코드를 추가하는 방법도 존재
728x90
반응형
'스프링 > JPA' 카테고리의 다른 글
JPA 상속 관계 (TABLE_PER_CLASS전략) (0) | 2021.05.21 |
---|---|
JPA 활용 1 (0) | 2021.04.23 |
JPA 활용 2 (0) | 2021.04.23 |
자바 ORM 표준 JPA (0) | 2021.04.16 |
다중 DBconnection (with JPA) (0) | 2021.02.27 |
댓글