MySQL 설정
MySQL 설치
MySQL
설치는 아래 글 참고
2020/10/30 - [Database/RDB] - MySQL 설치하기 (Mac OSX)
데이터베이스 생성
우선 예제에서 사용할 데이터 베이스 및 테이블을 생성한다.
- 본 글에서는 TEST_DB를 생성한다.
mysql> CREATE DATABASE TEST_DB
-> DEFAULT CHARACTER SET UTF8;
Query OK, 1 row affected, 1 warning (0.02 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| TEST_DB |
+--------------------+
5 rows in set (0.00 sec)
유저 생성 및 권한 부여
test_user
를 생성하고 비밀번호는 admin
으로 한다.
권한은 모든 권한을 준다.
-- 사용자 생성
CREATE USER test_user@localhost
IDENTIFIED BY 'admin';
-- DB 권한 부여
GRANT ALL PRIVILEGES
ON TEST_DB.*
TO test_user@localhost;
테이블 생성
-- MEMBER 테이블 생성
CREATE TABLE IF NOT EXISTS TEST_DB.MEMBER (
PID BIGINT NOT NULL AUTO_INCREMENT,
USERNAME VARCHAR(200),
NAME VARCHAR(200),
PRIMARY KEY(PID)
);
MySQL 설정은 여기서 끝. 정리하면 아래와 같다.
- 데이터베이스명:
TEST_DB
- 테이블 명:
MEMBER
Spring Boot 예제
의존성 추가
JPA
를 사용하기 위해 dependency
를 추가한다.
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
편의를 위해 롬복도 같이 추가하였다. (방법은 아래 글 참고)
2020/10/31 - [Spring/Spring Boot] - Spring Boot, Maven 프로젝트에 롬복 적용하기
SpringBoot와 MySQL 연동
application.properties
설정을 한다.
server.address=localhost
server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/TEST_DB?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=test_user
spring.datasource.password=admin
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# mysql 사용
spring.jpa.database=mysql
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
# 로깅 레벨
logging.level.org.hibernate=info
# 하이버네이트가 실행한 모든 SQL문을 콘솔로 출력
spring.jpa.properties.hibernate.show_sql=true
# SQL문을 가독성 있게 표현
spring.jpa.properties.hibernate.format_sql=true
# 디버깅 정보 출력
spring.jpa.properties.hibernate.use_sql_comments=true
자세한 내용은 아래 글 참고
2020/10/31 - [Spring/Spring Boot] - Spring Boot 와 MySQL 연동하기 (Maven 프로젝트)
Entity 클래스 생성
아래와 같이 MemberEntity
를 생성한다.
package com.example.demo.entity;
import lombok.*;
import javax.persistence.*;
@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;
}
}
@Entity
: JPA를 사용할 클래스를 명시하며, 테이블과 매핑하는 역할을 한다.
@Id
: 기본키(Primary Key)라는 것을 명시하는 역할을 한다.
@GeneratedValue
: 키값의 자동생성 전략을 설정할 수 있다. (default: GenerationType.AUTO)
- 본 글에서는
MySQL
에서AUTO_INCREMENT
를 사용하므로,GenetationType.IDENTITY
를 사용한다.
@Column
: 컬럼의 속성값을 설정할 수 있다.
Repository 생성
JpaRepository
를 extends하여 아래와 같이 인터페이스를 생성
package com.example.demo.repo;
import com.example.demo.entity.MemberEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface MemberRepository extends JpaRepository<MemberEntity, Long> {
}
Controller 생성
package com.example.demo.controller;
import com.example.demo.entity.MemberEntity;
import com.example.demo.repo.MemberRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController // JSON 형태 결과값을 반환해줌 (@ResponseBody가 필요없음)
@RequiredArgsConstructor // final 객체를 Constructor Injection 해줌. (Autowired 역할)
@RequestMapping("/v1") // version1의 API
public class MemberController {
private final MemberRepository memberRepository;
/**
* 멤버 조회
* @return
*/
@GetMapping("member")
public List<MemberEntity> findAllMember() {
return memberRepository.findAll();
}
/**
* 회원가입
* @return
*/
@PostMapping("member")
public MemberEntity signUp() {
final MemberEntity member = MemberEntity.builder()
.username("test_user@gmail.com")
.name("test user")
.build();
return memberRepository.save(member);
}
}
@RestController: 결과값을 JSON 형태로 반환해줌 (각 메소드에서 @ResponseBody를 작성할 필요 없음)
@RequiredArgsConstructor: final 객체를 Concstructor Injection을 해줌 (Autowired 역할)
결과 확인
/v1/member
로 POST
방식으로 요청하면
$ curl -X POST http://localhost:8080/v1/member
아래와 같이 응답이 온다. (정상적으로 멤버가 생성됨)
{"pid":1,"username":"test_user@gmail.com","name":"test user"}
그리고, GET
방식으로 요청하여 멤버를 조회해보면 방금 등록된 멤버가 보인다.
콘솔 로그
application.properties 설정 때문에 아래와 같이 SQL문이 출력된다.
Hibernate:
/* select
generatedAlias0
from
member as generatedAlias0 */ select
memberenti0_.pid as pid1_0_,
memberenti0_.name as name2_0_,
memberenti0_.username as username3_0_
from
member memberenti0_
'Backend > Spring Boot' 카테고리의 다른 글
Spring Boot와 @RequestMapping, @GetMapping, @RequestParam 예제 (1) | 2020.11.11 |
---|---|
Spring Boot 와 MySQL 연동하기 (Maven 프로젝트) (0) | 2020.10.31 |
Spring Boot, Maven 프로젝트에 롬복 적용하기 (0) | 2020.10.31 |
Spring Boot, 간단한 REST API 만들기 (0) | 2020.10.31 |
SpringBoot 서버 포트 변경하기 (0) | 2020.10.31 |