memostack
article thumbnail
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형

1. MySQL 설치

설치는 아래 글 참고

2020/10/30 - [Database/RDB] - MySQL 설치하기 (Mac OSX)

 

MySQL 설치하기 (Mac OSX)

MySQL 설치 본 글에서는 Homebrew 를 이용하여 MySQL 을 설치한다. $ brew update $ brew install mysql 만약, 특정 버전을 따로 설치하고 싶다면 아래 명령어를 수행한다. 그리고, 원하는 버전의 mysql을 설치한..

memostack.tistory.com

 

2. 스키마 & 테이블 생성

2.1. 유저 생성 및 권한 부여

<html />
CREATE USER test_user@localhost IDENTIFIED BY '1234'; GRANT ALL PRIVILEGES ON STUDY_DB.* TO test_user@localhost;

 

2.2. 스키마 생성

<html />
CREATE DATABASE STUDY_DB default CHARACTER SET UTF8;

 

2.3. 테이블 생성

<html />
CREATE TABLE IF NOT EXISTS STUDY_DB.USER ( ID BIGINT(20) NOT NULL AUTO_INCREMENT, ACCOUNT VARCHAR(45) NOT NULL, EMAIL VARCHAR(45), PHONE_NUMBER VARCHAR(45), CREATED_AT DATETIME NOT NULL, CREATED_BY VARCHAR(45) NOT NULL, UPDATED_AT DATETIME, UPDATED_BY VARCHAR(45), PRIMARY KEY(ID) );

 

3. 의존성 추가 (build.gradle)

<html />
dependencies { compile 'org.springframework.boot:spring-boot-starter-data-jpa' compile 'mysql:mysql-connector-java' }

 

4. application.properties 추가

<java />
# DB Source URL spring.datasource.url=jdbc:mysql://<IP>:<Port>/<DB>?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul # DB username spring.datasource.username=<username> # DB password spring.datasource.password=<password> # JPA 쿼리문을 보여줌 spring.jpa.show-sql=true

예를들어서 아래와 같이 작성

<java />
spring.datasource.url=jdbc:mysql://localhost:3306/STUDY_DB?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul spring.datasource.username=test_user spring.datasource.password=1234 spring.jpa.show-sql=true

 

실행 확인

 

5. JPA Entity 생성

User.java를 생성한다.

<java />
@Getter @ToString @AllArgsConstructor @NoArgsConstructor @Entity @Builder public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) // mysql의 AUTO_INCREMENT를 그대로 사용 private Long id; @Column(nullable = false) private String account; private String email; private String phoneNumber; @Column(nullable = false) private LocalDateTime createdAt; @Column(nullable = false) private String createdBy; private LocalDateTime updatedAt; private String updatedBy; }

 

사용 어노테이션 정리

  • @Entity: DB의 테이블을 뜻함
  • @Table: DB 테이블의 이름을 명시 (테이블 명과 클래스 명이 동일하면 따로 설정하지 않아도 됨)
  • @Id: Index primary key를 뜻함
  • @Column: DB Column을 명시
  • @GeneratedValue: Primary Key의 전략(Strategy)를 설정할 수 있음

 

6. JPA Repository 생성

UserRepository.java를 생성한다.

<java />
@Repository public interface UserRepository extends JpaRepository<User, Long> { }

@Repository

  • 따로 쿼리문 작성없이 생성, 조회, 업데이트, 삭제(CRUD)를 할 수 있게 기능을 제공해줌
  • 제너릭 타입으로는 첫번째부터, <Entity, PrimaryKey의 타입>을 넣는다

 

7. 테스트를 통해 기능 확인

UserRepositoryTest.java 생성

 

7.1. create 테스트

Insert를 할때는 Repository 객체의 save() 메소드를 사용한다.

<java />
@Slf4j public class UserRepositoryTest extends StudyApplicationTests { @Autowired private UserRepository userRepository; @Test public void create() { // User 생성 User user = User.builder() .account("Test User 03") .email("testuser03@google.com") .phoneNumber("010-1234-5678") .createdAt(LocalDateTime.now()) .createdBy("admin") .build(); // Create! User newUser = userRepository.save(user); log.info(newUser.toString()); } }

 

7.2. read 테스트

findById()를 통해 기본키를 넣어주면, 거기에 해당하는 User 객체를 Optional 타입으로 반환함

<java />
@Slf4j public class UserRepositoryTest extends StudyApplicationTests { @Autowired private UserRepository userRepository; ... @Test public void read() { Optional<User> user = userRepository.findById(2L); user.ifPresent( selectUser -> { // ifPresent: 값이 있다면, 가져옴 log.info(selectUser.toString()); }); } }

 

7.3. update 테스트

findById() 메소드로 기존 User 객체를 가져온다음, User 의 정보를 수정한 뒤 다시 save()하여 수정한다.

  • 주의. findById할때와 save 할때 객체의 ID 값이 동일해야 함
<java />
@Slf4j public class UserRepositoryTest extends StudyApplicationTests { @Autowired private UserRepository userRepository; ... @Test public void update() { Optional<User> user = userRepository.findById(2L); user.ifPresent( selectUser -> { User newUser = User.builder() .id(selectUser.getId()) .account(selectUser.getAccount()) .phoneNumber(selectUser.getPhoneNumber()) .email("updatedEmail@google.com") .createdAt(selectUser.getCreatedAt()) .createdBy(selectUser.getCreatedBy()) .updatedAt(LocalDateTime.now()) .updatedBy("TestUser02") .build(); userRepository.save(newUser); }); } }

 

7.4. delete 테스트

  1. findById()로 User를 가져온뒤에, 있다면 삭제를 진행.
  2. 삭제를 할때는 deleteById() 메소드를 사용
  3. 삭제 후 제대로 삭제됐는지 한번 더 조회하여 확인
<java />
@Slf4j public class UserRepositoryTest extends StudyApplicationTests { @Autowired private UserRepository userRepository; ... @Test @Transactional public void delete() { Optional<User> user = userRepository.findById(1L); // User가 있어야 함 Assertions.assertTrue(user.isPresent()); // 있다면 삭제 user.ifPresent( selectUser -> { userRepository.deleteById(selectUser.getId()); }); // 지워졌는지 확인 Optional<User> deletedUser = userRepository.findById(1L); Assertions.assertFalse(deletedUser.isPresent()); } }

 

8. 관련 글

2020/10/31 - [Spring/Spring Boot] - Spring Boot 와 MySQL 연동하기 (Maven 프로젝트)

 

Spring Boot 와 MySQL 연동하기 (Maven 프로젝트)

의존성 추가 아래와 같이 java와 mysql 커넥터 의존성을 pom.xml에 추가한다. mysql mysql-connector-java application.properties 설정 spring.datasource.url에는 DB명을 작성 spring.datasource.username에는..

memostack.tistory.com

2020/10/31 - [Spring/Spring Boot] - Spring Boot 에서 JPA 사용하기 (MySQL 사용)

 

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

 

반응형
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
profile

memostack

@bluemiv_mm

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!