Sekkison SpringBoot project - 02 # DB

ILCHAN AHN·2023년 3월 14일
0

Sekkison Project

DB

draw.io를 통해 테이블을 구성해주었다.

MySQL


cmd을 열고 MySQL에 접속한다.

CREATE DATABASE sekkison default CHARACTER SET UTF8;
	CREATE USER 'sekkison'@'localhost' IDENTIFIED BY '1234';
	GRANT ALL PRIVILEGES ON sekkison.* TO 'sekkison'@'localhost';
	FLUSH PRIVILEGES;

위 코드를 넣어주면 mySQL에 DB가 생성된다.

이후 springboot에 연결해주면 mySQL과 연동이 된다.

Table & Entity 생성

@Entity
@Table(name = "users")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User extends BaseEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "username", unique = true)
    private String username;

    @Column(name = "password", nullable = false)
    private String password;

    @Column(name = "name", unique = true)
    private String name;

    @Column(name = "phone", nullable = false, unique = true)
    private String phone;

    @Column(name = "gender", nullable = false)
    private Character gender;

    @Column(length=500, name = "content")
    @ColumnDefault("''")
    private String content;

    @Column(name = "pos_x")
    private Double posX;

    @Column(name = "pos_y")
    private Double posY;

    @Column
    private String api;

    @Transient
    private String memo;
}

@Id : Entity의 고유 식별자값
@GeneratedValue : strategy = GenerationType.IDENTITY 옵션을 통해 자동으로 unique 설정
@Column : @Entity class 밑에 데이터베이스로 저장할 수 있다.
@ColumnDefault : 초기값으로 null이 셋팅되는 @Column과 다르게 디폴트값을 넣어준다.
@Transient : 데이터베이스에 저장되지않는 변수로 DTO로서의 역할을 수행한다.

예시로 users을 통해 설명하도록 하겠다.
이 코드는 Java 언어를 사용하여 객체-관계 매핑(Object-Relational Mapping, ORM)을 위한 엔티티(Entity) 클래스를 정의한 것이다.

해당 클래스는 "users"라는 이름의 데이터베이스 테이블과 매핑되도록 만들었으며,클래스에는 다음과 같은 멤버 변수들이 정의되어 있다.

id: 엔티티의 고유 식별자 값이다. 해당 멤버 변수는 @Id 어노테이션으로 표시되어 있으며, @GeneratedValue 어노테이션을 사용하여 자동으로 생성되도록 설정되어 있다.

username: 사용자 이름을 저장하는 문자열 변수이다. @Column 어노테이션을 사용하여 데이터베이스 테이블의 "username" 열과 매핑되도록 설정되어 있으며, unique 옵션을 통해 중복되지 않도록 설정되어 있다.

password: 사용자 비밀번호를 저장하는 문자열 변수이다. @Column 어노테이션을 사용하여 데이터베이스 테이블의 "password" 열과 매핑되도록 설정되어 있으며, nullable 옵션을 통해 null 값을 허용하지 않도록 설정했다.

name: 사용자 이름을 저장하는 문자열 변수이다. @Column 어노테이션을 사용하여 데이터베이스 테이블의 "name" 열과 매핑되도록 설정되어 있으며, unique 옵션을 통해 중복되지 않도록 설정되어 있다.

phone: 사용자 전화번호를 저장하는 문자열 변수이다. @Column 어노테이션을 사용하여 데이터베이스 테이블의 "phone" 열과 매핑되도록 설정되어 있으며, nullable 옵션을 통해 null 값을 허용하지 않도록 설정되어 있다. 또한 unique 옵션을 통해 중복되지 않도록 설정했다.

gender: 사용자 성별을 저장하는 문자 변수이다. @Column 어노테이션을 사용하여 데이터베이스 테이블의 "gender" 열과 매핑되도록 설정되어 있으며, nullable 옵션을 통해 null 값을 허용하지 않도록 설정했다.

content: 사용자의 추가 정보를 저장하는 문자열 변수이다. @Column 어노테이션을 사용하여 데이터베이스 테이블의 "content" 열과 매핑되도록 설정되어 있으며, 길이는 500으로 설정되도록 하였다. 또한, @ColumnDefault 어노테이션을 사용하여 기본값을 빈 문자열('')로 설정했다.

posX, posY: 사용자 위치 정보를 저장하는 실수형 변수이다. @Column 어노테이션을 사용하여데이터베이스 테이블의 "pos_x"와 "pos_y" 열과 매핑되도록 설정했다.

api: 사용자가 사용하는 API 정보를 저장하는 문자열 변수이다. 구글, 카카오, 네이버 API로그인시 어떤 로그인인지 구분해주는 변수를 만들어 주었다. @Column 어노테이션을 사용하여 데이터베이스 테이블의 "api" 열과 매핑되도록 설정되어 있습니다.

memo: 해당 멤버 변수는 @Transient 어노테이션으로 표시되어 있으며, 데이터베이스와는 매핑되지 않는다. 따라서, 이 변수는 데이터베이스에 저장되지 않는다.

profile
백엔드 개발자를 꿈꿉니다

0개의 댓글