1. 프로젝트 만들기
파일 > 새프로젝트 > 기본적인거 작성후 다음 > 의존성주입 시작 > Developer Tools > Lombok 체크 > Web > Spring Web 체크 > SQL > Spring Data JPA 체크 > 하고싶은 DB선택 나는 MYSQL Driver 체크
2. DB 연동하기
application.yml 생성해서 사용, 단, application.properties 삭제 해야함
<application.yml>
#MySQL 설정
spring:
application:
name: hhplus-CleanArchitucture-java
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/[DB명]
username: root
password: [비밀번호]
jpa:
properties:
hibernate:
format_sql: true #true : JPA의 구현체인 Hibernate가 동작하면서 발생한 SQL 가독성 증가.
show-sql: true
hibernate:
ddl-auto: create #어플리케이션 기동 시 entity 에서 정의한것이 update 혹은 create 가 된다.
application.yml의 JPA 설정 값
(1) ddl-auto (Data Definition Language Auto)
: 이 옵션은 데이터베이스 스키마의 생성 및 변경을 자동화하는 데 사용됩니다.
주요 옵션 값:
(2) show-sql
: 이 옵션은 JPA가 생성한 SQL 쿼리를 콘솔에 출력할 지 여부를 설정합니다.
true로 설정하면 JPA가 실행하는 SQL 쿼리가 콘솔에 출력되며, false로 설정하면 출력되지 않습니다.
(3) format_sql
이 옵션은 JPA가 생성한 SQL 쿼리를 가독성 있게 포맷할 지 여부를 설정합니다.
true로 설정하면 JPA가 SQL 쿼리를 보기 좋게 정렬 및 들여쓰기합니다.
false로 설정하면 SQL 쿼리가 원래의 형식을 유지합니다.
//UserEntity.java
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true, nullable = false)
private String userName;
@Column(nullable = false)
private String password;
public User() {
}
public User(String userName, String password) {
this.userName = userName;
this.password = password;
}
public Long getId() {
return id;
}
public String getUserName() {
return userName;
}
public String getPassword() {
return password;
}
}
기본키를 Long 타입으로 사용하는 이유
@Entity : JPA 엔티티 클래스를 표시하는 데 사용됩니다.
데이터베이스의 테이블과 매핑되는 객체를 정의할 때 사용됩니다.
@Table
엔티티 클래스가 매핑될 데이터베이스 테이블의 이름을 지정하는 데 사용됩니다.
기본적으로 엔티티 클래스의 이름과 동일한 테이블 이름을 가지지만, 다른 테이블 이름으로 매핑하고자 할 때 사용할 수 있습니다.
@Id
엔티티 클래스의 기본 키를 나타내는 필드를 표시하는 데 사용됩니다.
데이터베이스의 기본 키와 매핑되며, 유일한 식별자 역할을 수행합니다.
@GeneratedValue
엔티티 클래스의 기본 키 값을 자동으로 생성하는 데 사용됩니다.
GenerationType.IDENTITY: 기본 키 값은 데이터베이스의 식별자 열을 사용하여 생성됩니다.
GenerationType.AUTO: 영속성 제공자가 데이터베이스와 구성에 기반하여 적절한 생성 전략을 선택합니다.
GenerationType.SEQUENCE: 기본 키 값은 데이터베이스 시퀀스를 사용하여 생성됩니다.
GenerationType.TABLE: 기본 키 값은 별도의 테이블을 사용하여 다음 사용 가능한 ID를 추적합니다.
@Column
엔티티 클래스의 속성이 데이터베이스 테이블의 열과 매핑되는 방법을 정의하는 데 사용됩니다.
name: 데이터베이스 컬럼의 이름을 지정합니다. 기본적으로 필드 이름에서 컬럼 이름이 유도됩니다.
nullable: 컬럼이 null 값을 허용하는지 여부를 지정합니다. -> @NotNull을 지원안함
@Column(name = "email", nullable = false)
private String email;
length: 문자열 기반 필드의 컬럼 길이를 지정합니다.
precision과 scale: 숫자 필드의 정밀도와 스케일을 지정합니다.
unique: 컬럼 값이 고유해야 하는지 여부를 지정합니다.
columnDefinition: 컬럼 정의에 대한 사용자 정의 SQL 조각을 지정할 수 있습니다.
@Entity
@NoArgsConstructor
@Getter
@Builder
@AllArgsConstructor
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true, nullable = false)
private String userName;
@Column(nullable = false)
private String password;
}
Lombok 주요 어노테이션
@Getter:
클래스의 필드에 대한 Getter 메서드를 자동으로 생성해줍니다.
해당 필드에 대한 public Getter 메서드를 자동으로 생성하여 필드 값을 조회할 수 있게 합니다.
@Getter 어노테이션은 클래스 레벨이나 필드 레벨에 적용할 수 있습니다.
@NoArgsConstructor:
매개변수가 없는 기본 생성자를 자동으로 생성해줍니다.
기본 생성자를 자동으로 생성하므로 객체를 인스턴스화할 때 매개변수 없이 생성자를 호출할 수 있습니다.
@NoArgsConstructor 어노테이션은 클래스 레벨에 적용할 수 있습니다.
@AllArgsConstructor:
모든 필드를 매개변수로 받는 생성자를 자동으로 생성해줍니다.
클래스의 모든 필드를 포함한 생성자를 자동으로 생성하므로, 인스턴스를 생성하고 모든 필드 값을 한 번에 설정할 수 있습니다.
@AllArgsConstructor 어노테이션은 클래스 레벨에 적용할 수 있습니다.
@ToString:
toString() 메서드를 자동으로 생성해줍니다.
toString() 메서드는 객체의 문자열 표현을 반환하는데 사용되며, 해당 어노테이션을 사용하면 필드 값들을 포함한 문자열 표현을 간단하게 생성할 수 있습니다.
@ToString 어노테이션은 클래스 레벨에 적용할 수 있습니다.
Builder pattern, @Builder
Builder 패턴은 객체 생성을 유연하게 하기 위한 디자인 패턴 중 하나입니다. 일반적으로 많은 매개변수를 가진 객체를 생성할 때, 가독성을 높이고 코드 작성을 간편하게 하기 위해 사용됩니다.
Builder 패턴은 다음과 같은 특징을 가지고 있습니다:
@Builder 어노테이션은 Lombok에서 제공하는 어노테이션 중 하나로, Builder 패턴을 자동으로 생성해주는 기능을 제공합니다. @Builder 어노테이션을 클래스에 적용하면 해당 클래스에 대한 Builder 클래스가 자동으로 생성되고, 필드 값의 설정을 간편하게 할 수 있습니다.