e-mail
양식에서 개념을 얻어 만들어진 '사람이 쉽게 읽을 수 있는' 데이터 직렬화 양식이다.properties
와 비교했을 때 yml 설정파일의 장점application.yml
예시#port 수정 server: port: 9090 #DB Connection spring: datasource: url: jdbc:oracle:thin:@localhost:1521:xe driver-class-name: oracle.jdbc.OracleDriver username: spring password: spring #JPA jpa: hibernate: ddl-auto: create properties: hibernate: format_sql: true show_sql: true
embedded type
)이라고 한다.int
, String
등과 같은 타입@Embeddable
과 @Embedded
둘 중에 하나만 넣어도 된다. 하지만 가독성을 위해 둘 다 넣는 것을 권장한다.@Embeddable
)@Embeddable @Getter @Setter @AllArgsConstructor @NoArgsConstructor public class Address { private String city; private String street; private String zipcode; }
@Embedded private Address address;
member.setAddress(new Address("서울","역삼","123"));
Address
를 사용한 두 개의 주소 정의// 집주소 @Embedded private Address address; // 회사주소 @Embedded @AttributeOverrides({ @AttributeOverride(name="city",column=@Column(name="WORK_CITY")), @AttributeOverride(name="street",column=@Column(name="WORK_STREET")), @AttributeOverride(name="zipcode",column=@Column(name="WORK_ZIPCODE")) }) private Address workAddress;
Address addr = new Address("서울","역삼","123"); // member1에 addr 할당 Member member1 = new Member(); member.setUsername("user1"); member.setAddress(addr); em.persist(member1); // member2에 addr 할당 Member member2 = new Member(); member2.setUsername("user2"); member2.setAddress(addr); em.persist(member2); // 1번째 member의 주소만 newCity로 변경하고자 해도 member2의 값이 동시에 변경됨 member1.getAddress().setCity("newCity");
setter
를 만들지 않는 방법도 있다.Address addr = new Address("서울","역삼","123"); // member1에 addr 할당 Member member1 = new Member(); member.setUsername("user1"); member.setAddress(addr); em.persist(member1); // 기존 addr을 복사 Address copyAddr = new Address(addr.getCity(),addr.getStreet(),addr.getZipcode()); // member2에 copyAddr 할당 Member member2 = new Member(); member2.setUsername("user2"); member2.setAddress(copyAddr); em.persist(member2);