[Spring JPA #1] JPA 시작 및 세팅하기
- Spring/Spring JPA
- 2019. 1. 26. 23:11
반응형
| JPA(Java Persistent API)
- JPA(Java Persistent API)는 자바의 영속성 관리와 ORM을 위한 표준 기술입니다. 기존 EJB ORM이던 Entity Bean을 JPA라 바꿔 체계화한 기술이죠.
- ORM(Object Relational Mapping)이란 RDB 테이블을 객체지향적으로 사용하기 위한 기술입니다. 객체와 RDB의 테이블을 매핑하여 자바 프로그램 코드상에서 RDB를 객체지향적으로 쓸 수 있게 고려한 기술이라고 생각하면 될 것입니다.
- 이 JPA를 Spring에서 쉽게 쓸 수 있도록 한 것이 Spring Data JPA입니다.
장점
- 객체 지향적으로 데이터를 관리하기 때문에 비즈니스 로직에 집중할 수 있으며, 객체지향 개발이 가능
- 여러 RDBMS 벤더마다 다른 쿼리문을 일일히 고려하지 않고 하나의 비즈니스 로직을 소스 코드 상에서 제대로 구현하면 어떤 RDB에서도 해당 로직을 따로 수정할 필요 없이 적용할 수 있음
단점
- 학습 비용이 많이 든다. 즉 어렵다.
- 제대로 사용하지 않을 시 성능 문제가 발생하며, 데이터 손실이 발생할 수 있다.
| JPA 세팅
postgresql 도커 구동
[Spring/Spring Boot] - [Spring Boot #23] 스프링 부트 PostgreSQL 연동하기
프로젝트 구조
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── tutorial
│ │ │ └── springbootjpa
│ │ │ ├── Account.java
│ │ │ ├── JpaRunner.java
│ │ │ └── SpringBootJpaApplication.java
│ │ └── resources
│ │ ├── application.properties
│ │ ├── static
│ │ └── templates
의존성 관리
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
application.properties
spring.datasource.url=jdbc:postgresql://localhost:5432/springboot
spring.datasource.username=saelobi
spring.datasource.password=pass
spring.jpa.hibernate.ddl-auto=create
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
- postgresql 관련 설정 정보를 입력합니다.
- spring.jpa.hibernate.ddl-auto는 JPA를 통해 DBMS에 쿼리를 날릴 경우 DBMS 상에서 이 쿼리가 실행되는 테이블이 드랍되었다가 새로 생성되며 쿼리가 실행된다는 것을 의미합니다.
- spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation 은 createLob()을 구현하지 않았다는 경고메세지를 나오지 않게 설정하는 설정 정보입니다.
소스 코드
@SpringBootApplication
public class SpringBootJpaApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootJpaApplication.class, args);
}
}
@Entity
public class Account {
@Id
@GeneratedValue
private Long id;
private String username;
private String password;
private String email;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
- @Entity는 특정 DB Table과 매핑되는 클래스를 의미합니다.
- @Id는 DB Table에서 ID column에 해당되는 필드입니다. @GeneratedValue를 통해서 auto_increment에 대응하는 정보를 나타냅니다.
@Component
@Transactional
public class JpaRunner implements ApplicationRunner {
@PersistenceContext
EntityManager entityManager;
@Override
public void run(ApplicationArguments args) throws Exception {
Account account = new Account();
account.setUsername("saelobi");
account.setPassword("jpa");
entityManager.persist(account);
}
}
- @Transational은 트랜잭션 속성을 클래스 내의 모든 메서드에게 부여하는 어노테이션입니다.
- EntityManager 인터페이스는 JPA의 핵심이며 이 인터페이스의 구현체를 통해서 DB와 자바 객체 사이의 데이터 교환이 이루어집니다.
결과화면
springboot=# select * from account;
id | password | username
----+----------+----------
1 | jpa | saelobi
https://www.inflearn.com/course/스프링-데이터-jpa
반응형
'Spring > Spring JPA' 카테고리의 다른 글
[Spring JPA #6] JPA Cascade (0) | 2019.01.27 |
---|---|
[Spring JPA #5] JPA 엔티티 상태 (0) | 2019.01.27 |
[Spring JPA #4] JPA 관계 매핑 (0) | 2019.01.27 |
[Spring JPA #3] Entity 매핑 및 Value 타입 매핑 (2) | 2019.01.27 |
[Spring JPA #2] JPA 엔티티 매핑 (0) | 2019.01.27 |
이 글을 공유하기