[MySQL&Java Spring] 애플리케이션과 데이터베이스 연결하기

1 분 소요

필요한 API (JPA, MySQL)

build.gradle

//jpa
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

//mysql
runtimeOnly 'com.mysql:mysql-connector-j'

application.yaml

spring:
  datasource:
    url: ${MYSQL_URL}
    username: ${MYSQL_USERNAME}
    password: ${MYSQL_PASSWORD}
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    defer-datasource-initialization: true
    hibernate.ddl-auto: update
    #hibernate.ddl-auto: none
    show-sql: true
    properties:
      hibernate.format_sql: true
      hibernate.default_batch_fetch_size: 100
      hibernate.jdbc.time_zone: Asia/Seoul
  • Driver: com.mysql.cj.jdbc.Driver

설정 완료

Entity Class

DB의 domain을 나타내는 entity class를 설계

@Data
@Entity
@Table(name = "kakao_user")
public class KakaoUser {

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

    @Column(name = "kakao_id", unique = true, nullable = false)
    private Long kakaoId;

    @Column(name = "nickname")
    private String nickname;

    @Column(name = "profile_image_url")
    private String profileImageUrl;
}
  • @Data : Equivalent to @Getter + @Setter + @RequiredArgsConstructor + @ToString + @EqualsAndHashCode.

Repository Interface

public interface KakaoUserRepository extends JpaRepository<KakaoUser, Long> {
    KakaoUser findByKakaoId(Long KakaoId);
}

JPA

JPA는 자바의 ORM기술을 쉽게 구현하도록 도와주는 API

JpaRepository를 상속하는 인터페이스에 메서드 이름만 적어놓으면 알아서 다 처리(구현체 생성, 쿼리문 구현 등)해주는 좋은 ORM이다.   메소드 이름은 findby(필드명), deleteby(필드명)처럼 메소드 명칭만 적어주면 개발자는 SQL을 작성하지 않아도 쿼리문을 만들어준다.

자바에서 객체를 데이터베이스에 저장하고 관리하기 위한 인터페이스와 기능을 제공하는 API. JPA를 사용하면 객체와 관계형 데이터베이스 간의 매핑을 손쉽게 처리할 수 있으며 데이터베이스의 CRUD(Create, Read, Update, Delete) 작업을 간편하게 수행할 수 있다.

출처: https://ccomccomhan.tistory.com/131 [[꼼꼼한 개발자] 꼼코더:티스토리]

Service Update

// DB에 사용자 정보 저장
KakaoUser kakaoUser = kakaoUserRepository.findByKakaoId(userInfo.getId());
if (kakaoUser == null) {
    kakaoUser = new KakaoUser();
    kakaoUser.setKakaoId(userInfo.getId());
}
kakaoUser.setNickname(userInfo.getKakaoAccount().getProfile().getNickName());
kakaoUser.setProfileImageUrl(userInfo.getKakaoAccount().getProfile().getProfileImageUrl());
kakaoUserRepository.save(kakaoUser); //jpa 사용
  • new KakaoUser() : Java에서는 다른 생성자를 정의하지 않으면 자동으로 기본 생성자(매개변수가 없는 생성자)를 제공합니다. 하지만, 다른 생성자를 정의한 경우 기본 생성자를 명시적으로 정의해야 합니다.
  • kakaoUser 가 null 이 아니더라도 nickname과 profile을 저장하는 이유
    • 이 코드를 통해 항상 최신 사용자 정보를 유지할 수 있습니다. 예를 들어, 사용자가 카카오 계정에서 닉네임이나 프로필 사진을 변경했을 때, 이를 반영하여 데이터베이스에 저장한다.

DB 확인

Untitled 1

카테고리:

업데이트: