Spring Boot

[Spring Boot] 개발환경 설정 -(5) mySQL JPA 연동하기-②

DEV_HEO 2022. 6. 30. 01:45
320x100

지난 포스팅에서 데이터베이스와 사용자, 테이블을 만들었다.

이번 포스팅에서는 spring boot 설정과 

생성한 테이블에서 데이터를 조회하고 추가해볼 것이다.

 


1. 프로젝트 설정

(1) Build.Gradle

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-rest'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	annotationProcessor 'org.projectlombok:lombok'
	compileOnly 'org.projectlombok:lombok'
	developmentOnly 'org.springframework.boot:spring-boot-devtools'
	runtimeOnly 'com.oracle.database.jdbc:ojdbc8'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	
	//swagger
	implementation 'io.springfox:springfox-boot-starter:3.0.0'
	implementation 'io.springfox:springfox-swagger-ui:3.0.0'
	
    //JPA mysql
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa' // JPA
	implementation 'mysql:mysql-connector-java' // MySql
}

 

(2) application.properties

server.address=localhost
server.port=8080

# MySQL
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# DB Source URL
spring.datasource.url=jdbc:mysql://localhost:3306/PigPlace?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC
# DB username
spring.datasource.username=pigplace
# DB password
spring.datasource.password=1234

# mysql 사용
spring.jpa.database=mysql

# 처리시 발생하는 SQL을 보여줄 것인지 결정
spring.jpa.show-sql=true
# 프로젝트 실행시 자동으로 DDL(create, alter, drop) 을 생성할 것 인지 결정하는 설정
# create : 매번 테이블 생성을 새로 시도한다 / update : 변경이 필요한 경우 alter로 변경되고 테이블이 없는경우 create가 된다
spring.jpa.hibernate.ddl-auto=update
# 실제 JPA 구현체인 Hibernate가 동작하면서 발생하는 SQL을 포맷팅해서 출력한다 -> 실행되는 SQL의 가독성을 높여준다
spring.jpa.properties.hibernate.format_sql=true
# 디버깅 정보 출력
spring.jpa.properties.hibernate.use_sql_comments=true
# MySQL 상세 지정
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect


# 로깅 레벨
#logging.level.org.hibernate=info

 

 

 


2. Entity, Repository 생성

(1) MemberEntiy

package com.pigplace.test.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter // getter 메소드 생성
@Builder // 빌더를 사용할 수 있게 함
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity(name="member") // 테이블 명을 작성
public class MemberEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long pid;

    @Column(nullable = false, unique = true, length = 30)
    private String username;

    @Column(nullable = false, length = 100)
    private String name;

    public MemberEntity(String username, String name) {
        this.username = username;
        this.name = name;
    }
}

 

(2) MemberRepository

package com.pigplace.test.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.pigplace.test.entity.MemberEntity;

@Repository
public interface MemberRepository extends JpaRepository<MemberEntity, Long> {

}

 

 

(3) RestTestController

package com.pigplace.test.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.pigplace.common.vo.ControllerSupport;
import com.pigplace.common.vo.ResponseEntity;
import com.pigplace.test.entity.MemberEntity;
import com.pigplace.test.repository.MemberRepository;
import com.pigplace.test.vo.TestVO;

import lombok.RequiredArgsConstructor;

@RestController // JSON 형태 결과값을 반환해줌 (@ResponseBody가 필요없음)
@RequiredArgsConstructor // final 객체를 Constructor Injection 해줌. (Autowired 역할)
@RequestMapping("/api")
public class RestTestController extends ControllerSupport{
	
	private final MemberRepository memberRepository;

    //멤버 조회
    @GetMapping("member")
    public ResponseEntity<?> findAllMember() {
        List<MemberEntity> memberList = memberRepository.findAll();
        
        return getOkResponse("조회성공~!", memberList);
    }

    //회원가입
    @PostMapping("member")
    public ResponseEntity<?> signUp() {
        final MemberEntity member = MemberEntity.builder()
                .username("test_user@gmail.com")
                .name("test user")
                .build();
        
//        memberRepository.save(member);
        
        return getOkResponse(memberRepository.save(member));
    }
}

 

 

 

 

 

 


3. 결과

(1) 회원가입

 

 

(2) 멤버 조회

 

 

 


쿼리문을 직접 작성하다가

JPA를 사용하니까 어색하긴 한데 확실히 편하긴하다.

이번 프로젝트에서 복잡하 쿼리들은 사용하지 않을것 같아 유용하게 쓸 것 같다.

 

 

 

https://memostack.tistory.com/155

 

Spring Boot 에서 JPA 사용하기 (MySQL 사용)

MySQL 설정 MySQL 설치 MySQL 설치는 아래 글 참고 2020/10/30 - [Database/RDB] - MySQL 설치하기 (Mac OSX) MySQL 설치하기 (Mac OSX) MySQL 설치 본 글에서는 Homebrew 를 이용하여 MySQL 을 설치한다. $ brew..

memostack.tistory.com

 

320x100