[Spring JPA #3] Entity 매핑 및 Value 타입 매핑
- Spring/Spring JPA
- 2019. 1. 27. 01:10
반응형
| Entity 매핑 및 Value 타입 매핑
프로젝트 구조
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── tutorial
│ │ │ └── springbootjpa
│ │ │ ├── Account.java
│ │ │ ├── Address.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
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
- spring.jpa.show-sql=true 는 JPA가 생성하는 SQL문을 콘솔창에 출력하는 옵션입니다.
- spring.jpa.properties.hibernate.format-sql=true 는 콘솔 창에 출력되는 SQL문을 포맷팅된 형태로 출력할 수 있게 하는 옵션입니다.
소스 코드
package com.tutorial.springbootjpa;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootjpaApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootjpaApplication.class, args);
}
}}
package com.tutorial.springbootjpa;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.transaction.Transactional;
@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);
}
}
package com.tutorial.springbootjpa;
import javax.persistence.*;
import java.util.Date;
@Entity(name = "myAccount")
@Table(name = "Account")
public class Account {
@Id
@GeneratedValue
private Long id;
@Column(nullable=false, unique=true)
private String username;
private String password;
@Temporal(TemporalType.TIMESTAMP)
private Date created = new Date();
private String yes;
@Transient
private String no;
@Embedded
@AttributeOverrides({
@AttributeOverride(name="street", column = @Column(name="home_street"))
})
private Address address;
public Date getCreated() {
return created;
}
public void setCreated(Date created) {
this.created = created;
}
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(name="myAccount") 어노테이션은 이 클래스가 엔티티 역할을 할 것이라는 부가적인 정보를 제공하는 어노테이션이며 이 엔티티의 이름은 기본적으로 클래스명이며 name=[엔티티명] 으로 다른 이름으로 바꿀 수 있습니다.
- @Table 어노테이션은 이 엔티티가 어떤 테이블과 매핑될 것인지를 나타내는 어노테이션이며 기본적으로 클래스명과 같은 DBMS 테이블과 매핑됩니다. 다른 테이블과 매핑할 시에는 name=[테이블명] 으로 바꿀 수 있습니다.
- @Id 는 테이블에서 식별자 역할을 하는 컬럼명과 매핑합니다. 또한 id값을 자동 생성할 시 어떻게 생성할 것인지에 대한 정보를 제공하는 @GeneratedValue를 같이 쓸 수 있습니다.
- @Column은 멤버 변수가 테이블 컬럼과 매핑됨을 나타내며 기본적으로 @Entity의 모든 멤버 변수는 @Column 어노테이션이 부착된 형태로 제공됩니다.
- @Temporal은 시간, 날짜 타입을 지정하는 어노테이션입니다.
- @Transient는 멤버 변수가 테이블의 어떤 컬럼과 매핑하지 않을 것을 나타내는 어노테이션입니다.
- @Embedded는 Composite Value 타입을 지정할 때 쓰이는 어노테이션이며 이 Composite Value값은 자바의 클래스 형식으로 작성할 수 있습니다. @AttributeOverride 어노테이션을 통해서 Composite Value 타입의 멤버 변수를 테이블의 어떤 컬럼과 매칭할 지 커스터마이징할 수 있습니다.
package com.tutorial.springbootjpa;
import javax.persistence.Embeddable;
@Embeddable
class Address {
private String street;
private String city;
private String state;
private String zipCode;
}
- @Embeddable 어노테이션을 통하여 이 클래스가 Composite Value를 나타내는 클래스이며 여기서 정의된 클래스는 위 엔티티의 Composite Value로서 사용될 수 있습니다.
결과 화면
springboot=# select * from account;
id | city | state | home_street | zip_code | created | password | username | yes
----+------+-------+-------------+----------+-------------------------+----------+----------+-----
1 | | | | | 2019-01-27 01:06:58.514 | 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 #2] JPA 엔티티 매핑 (0) | 2019.01.27 |
[Spring JPA #1] JPA 시작 및 세팅하기 (0) | 2019.01.26 |
이 글을 공유하기