@Entity에 정의한 ddl 속성 db에 update 하기
2019. 3. 29. 11:20ㆍSpring/Basic
반응형
- Entity에 정의한 ddl 속성을 db에 create 또는 update하기.
- 컬럼에 대한 속성을 설정하기.
- ColumnDefinition으로 세부사항 설정하기.
프로퍼티 파일에 spring.jpa.generate-ddl 속성을 true로 설정하고
(또는, spring.jpa.properties.hibernate.hbm2ddl.auto 속성을 update로 설정)
애플리케이션이 start되면서, 해당 table이 존재하지 않을 경우, entity에 설정한 대로 테이블이 자동 생성됩니다.
spring: profiles: local datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: "jdbc:mysql://127.0.0.1:3306/foodtruck?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC" username: jini password: "pwpw" hikari: auto-commit: false connection-test-query: SELECT 1 minimum-idle: 10 maximum-pool-size: 50 transaction-isolation: TRANSACTION_READ_UNCOMMITTED pool-name: hikari-pool-1 jpa: database-platform: org.hibernate.dialect.MySQL5InnoDBDialect properties: hibernate: format_sql: true generate-ddl: true
@Getter @Setter @ApiModel(description = "사용자") @Entity @Table(name = "user") @DynamicUpdate public class User implements Serializable { private static final long serialVersionUID = -563329217866858622L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(updatable = false, nullable = false, columnDefinition = "INT(11)") private Long id; @ApiModelProperty(value = "0: 일반회원, 1: 사업자", allowableValues="0, 1") @Column(nullable = false, length = 1, columnDefinition = "CHAR(1) DEFAULT '0'") private String type; @ApiModelProperty(value="이메일", allowableValues="email@domain") @Column(nullable = false, unique = true, length = 100) private String email; @Column(nullable = false, length = 50) private String name; @ApiModelProperty(value = "남자(1,3,5), 여자(2,4,6)", allowableValues="range[1, 6]") @Column(nullable = false, length = 1, columnDefinition = "CHAR(1) DEFAULT '1'") private String sex; @Column(nullable = false, length = 6) private String birthDate; @Column(nullable = false, length = 20) private String phoneNumber; @Column(nullable = false, length = 150) private String password; @ApiModelProperty(value="삭제유무") @Column(nullable = false, columnDefinition = "CHAR(1) DEFAULT 'N'") private String delYn; @ApiModelProperty(value="생성일시") @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") @Temporal(TemporalType.TIMESTAMP) @Column(updatable = false, columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP") private Date createTimestamp; @ApiModelProperty(value="수정일시") @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") @Temporal(TemporalType.TIMESTAMP) @Column(columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP") private Date updateTimestamp; public User() { this.delYn = "N"; this.type = "0"; this.sex = "1"; } }
@Getter, @Setter로 setter, getter 를 자동 생성해주고,
@Column 애너테이션에 컬럼명, null여부, unique 여부, 글자 크기 디폴트값 등에 대한 설정을 추가합니다.
del_yn 컬럼의 경우, CHAR(1)에 디폴트값은 'N'으로 생성된다.
문자열의 경우, 길이를 length로 설정해 줄 수 있기에 columnDefinition으로 설정하지 않아도 됩니다.
createTimestamp의 기본 값을 현재 시간으로 설정하고 싶다면, columnDefinition을 TIMESTAMP DEFAULT CURRENT_TIMESTAMP 으로 설정하면 됩니다.
udpateTimestamp의 경우에는 row 업데이트 시 자동으로 update하고 싶은 것이니 ON UPDATE CURRENT_TIMESTAMP
을 추가합니다.
애플리케이션을 서버에 올리면, 아래와 같은 테이블이 자동 생성된다.
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `create_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `del_yn` char(1) NOT NULL DEFAULT 'N', `update_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `birth_date` varchar(6) NOT NULL, `email` varchar(100) NOT NULL, `name` varchar(50) NOT NULL, `password` varchar(150) NOT NULL, `phone_number` varchar(20) NOT NULL, `sex` char(1) NOT NULL DEFAULT '1', `type` char(1) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `UK_ob8kqyqqgmefl0aco34akdtpe` (`email`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
id의 경우, 크기를 따로 지정하지 않았기 때문에 long타입의 디폴트 길이인 20에, bigint 형으로 생성되었다.
728x90
반응형
'Spring > Basic' 카테고리의 다른 글
[Spring Boot] JPA와 MyBatis 동시에 사용하기 (2) | 2019.12.27 |
---|---|
[Spring Boot] Custom Banners (2) | 2019.08.02 |
[Spring Boot] 이미지 파일 경로 외부에 설정하기 with yml (5) | 2019.07.31 |
Swagger 2 에서 Pageable 이용하기 (0) | 2019.05.29 |
spring boot 에서 JPA 사용하기 with MySQL (2) | 2019.03.06 |