JPA, 스프링 데이터 JPA, Querydsl -> JpaTransactionManager JdbcTemplate, MyBatis -> DataSourceTransactionManager JpaTransactionManager DataSourceTransactionManager 가 제공하는 기능을 대부분 제공한다. JPA라는 기술도 결국 내부에서는 DataSource와 JDBC Connection 을 사용하기 때문이다. 결과적으로 JpaTransactionManager를 하나만 스프링 빈에 등록하면, JPA, JdbcTemplate, MyBatis 모두를 하나의 트랜잭션으로 묶어서 사용할 수 있다. JPA의 플러시 타이밍 JPA 호출이 끝난 시점에 JPA가 제공하는 플러시라는 기능을 사용해서 JPA의 ..
주요 기능 스프링 데이터 JPA는 JPA를 편리하게 사용할 수 있도록 도와주는 라이브러리이다. 공통 인터페이스 기능 쿼리 메서드 기능 공통 인터페이스 기능 JpaRepository Interface 를 통해서 기본적인 CRUD 기능을 제공한다. 공통화 가능한 기능이 거의 모두 포함되어 있다. @Indexed public interface Repository { } package org.springframework.data.repository; @NoRepositoryBean public interface CrudRepository extends Repository { S save(S entity); Iterable saveAll(Iterable entities); Optional findById(ID i..
스프링: DI 컨테이너를 포함한 애플리케이션 전반의 다양한 기능을 제공 JPA: ORM 데이터 접근 기술을 제공 JdbcTemplate, MyBatis 같은 SQL Mapper 기술은 SQL을 개발자가 직접 작성해야 한다. JPA를 사용하면 SQL도 JPA가 대신 작성하고 처리해준다. 스프링 데이터 JPA, Querydsl 라는 JPA를 편리하게 사용하도록 도와주는 기술을 함께 사용한다. 설정 spring-boot-starter-data-jpa 라이브러리를 사용 spring-boot-starter-jdbc 도 함께 포함한다. 다음과 같은 라이브러리가 추가됨 hibernate-core: JPA 구현체인 하이버네이트 라이브러리 jakarta.persistence-api: JPA Interface spring..
장점 SQL을 XML에 편리하게 작성할 수 있고, 동적 쿼리를 매우 편리하게 작성할 수 있다. 단점 JdbcTemplate 은 스프링에 내장된 기능이고, 별도의 설정없이 사용할 수 있다. MyBatis는 약간의 설정이 필요한다. 설정 mybatis-spring-boot-starter 라이브러리를 사용하면 MyBatis를 스프링과 통합하고, 설정도 아주 간단히 할 수 있다. //MyBatis 추가 implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0' 스프링 부트가 버전을 관리해주는 공식 라이브러리가 아니기 때문에 버전 정보를 붙여야 한다. 라이브러리 mybatis-spring-boot-starter : MyBatis 를 스프링..
SQL을 직접 사용하는 경우에 JdbcTemplate은 JDBC를 매우 편리하게 사용할 수 있게 도와준다. 장점 설정의 편리함 spring-jdbc 라이브러리에 포함 반복 문제 해결 템플릿 콜백 패턴 사용 단점 동적 SQL 해결이 어려움 save INSERT, UPDATE, DELETE SQL에는 template.update() 메서드를 사용한다. 데이터 저장시 PK 생성시에 identity ( auto increment ) 방식을 사용한다. 따라서 데이터베이스가 PK인 ID를 대신 생성해준다. 데이터베이스에 INSERT가 완료되어야 생성된 PK ID 값을 확인할 수 있다. KeyHolder 와 connection.preparedStatement 을 사용해서 id를 지정해주면 INSERT 쿼리 실행 이후..