* JPA(Java Persistence API)
자바 객체와 데이터베이스 테이블 간의 매핑을 처리하는 ORM(Object Relational Mapping) 기술의 표준
ORM은 간단히 표현하는 객체와 관계를 설정하는 것
JPA중 하이버네이트가 가장 많이 사용된다
장점) 개발편리, 디비에 독립적인 개발 가능, 유지보수 쉽다
단점) 학습곡선크다(튜닝등..), 특정 디비기능 사용못함(오라클 함수..), 객체지향 설계필요(디비의 테이블 설계후 그에 맞춰서 객체 및 비지니스 로직이 설계,개발된다)
* 스프링 데이터 JPA
JPA를 스프링에서 쉽게 사용할 수 있게 제공하는 라이브러리
Repository 인터페이스 제공하여 이 인터페이스 상속받아 정해진 규칙에 맞게 메소드 작성
그리고 내부적으로는 실제 기능을 담당하는 JPA의 구현제(JPA 프로바이더로 하이버네이트) 가 사용한다.
하이버네이트를 모르더라도 프레임워크가 하이버네이트를 이용해서 적절한 코드를 생성하기에 JPA를 쉽게 사용가능하다
* 스프링 데이터 jpa 기본설정
1) resources/application.properties 추가
#JPA 설정
spring.jpa.database=mysql
#Mysql 상세지정
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
spring.jpa.properties.hibernate.dialect.storage_engine=innodb
#테이블생성과 같은 스크립트(DDL)를 자동으로 실행되게한다.
#실제 개발에서는 꼭 false로 설정!!(디비에 변경이 생기면서 데이터가 삭제될수 있다)
spring.jpa.generate-ddl=true
#새로운 ID 생성옵션. 하이버네이트ID 생성 옵션은 AUTO,TABLE,SEQUENCE가 있음.
#여기서는 mysql의 자동증가 사용으로 false 설정
spring.jpa.hibernate.use-new-id-generator-mappings=false
#실행되는 SQL문을 보여줄 것인가?
spring.jpa.show-sql=true
-- spring.jpa.generate-ddl=true 실제 개발에서는 꼭 false로 설정!!(디비에 변경이 생기면서 데이터가 삭제될수 있다)
2) JPA 설정 빈등록하기
board/configuration/DatabaseConfiguration.java
import java.util.Properties;
@Configuration
@PropertySource("classpath:/application.properties") //설정파일 위치지정
@EnableTransactionManagement //스프링에서 제공하는 어노테이션 기반 트랜잭션을 활성화
public class DatabaseConfiguration {
@Autowired
private ApplicationContext applicationContext;
..중략 ...
@ConfigurationProperties(prefix = "spring.jpa")
public Properties hibernateConfig() {
return new Properties();
}
}
3) 날짜 API 설정하기(Jsr310JpaConverters)
/board/BoardApplication.java
-- @EnableJpaAuditing, @EntityScan 추가
package board;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.data.jpa.convert.threeten.Jsr310JpaConverters;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@EnableJpaAuditing
@EntityScan(
basePackageClasses = {Jsr310JpaConverters.class},
basePackages = {"board"})//basePackages의 하위에서 JPA 엔티티검색
@SpringBootApplication
public class BoardApplication {
public static void main(String[] args) {
SpringApplication.run(BoardApplication.class, args);
}
}
'SpringBoot > (책)스프링부트 시작하기' 카테고리의 다른 글
[springboot] 14. 스프링 데이터 jpa 3(repository작성) (0) | 2023.05.06 |
---|---|
[springboot] 14. 스프링 데이터 jpa 2(엔티티 생성하기) (0) | 2023.05.06 |
[springboot] 10. 한글처리를 위한 인코딩 설정하기 (0) | 2023.04.26 |
[springboot] 9. 예외처리하기 (0) | 2023.04.25 |
[springboot] 8. 트랜잭션 적용하기 (0) | 2023.04.24 |