2020. 1. 30. 14:55ㆍProject E/Project E 파트2
프로젝트에 Spring Data Jpa 적용
의존성 등록
build.gradle
buildscript {
ext {
springBootVersion = '2.1.7.RELEASE'
}
repositories {
mavenCentral()
jcenter()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
group 'com.minokuma.book'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-web')
compile('org.projectlombok:lombok')
compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('com.h2database:h2')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
도메인 패키지 생성
src/main/java
com.minokuma.book.springboot
domain.posts
Posts.java
package com.minokuma.book.springboot.domain.posts;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@Getter
@NoArgsConstructor
@Entity
public class Posts {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(length = 500, nullable = false)
private String title;
@Column(columnDefinition = "TEXT", nullable = false)
private String content;
private String author;
@Builder
public Posts(String title, String content, String author){
this.title = title;
this.content = content;
this.author = author;
}
}
src/main/java
com.minokuma.book.springboot
domain.posts
PostsRepository.java 인터페이스
package com.minokuma.book.springboot.domain.posts;
import org.springframework.data.jpa.repository.JpaRepository;
public interface PostsRepository extends JpaRepository<Posts,Long> {
}
게시글 저장 불러오기
src/test/java
com.minokuma.book.springboot
domain.posts
PostsRepository.java
package com.minokuma.book.springboot.domain.posts;
import org.junit.After;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(SpringRunner.class)
@SpringBootTest
public class PostsRepositoryTest {
@Autowired
PostsRepository postsRepository;
@After
public void cleanup(){
postsRepository.deleteAll();
}
@Test
public void retrieveBoardSave(){
String title = "테스트 게시글";
String content = "테스트 본문";
postsRepository.save(Posts.builder()
.title(title)
.content(content)
.author("minokuma@gmail.com").build());
List<Posts> postsList = postsRepository.findAll();
Posts posts = postsList.get(0);
assertThat(posts.getTitle()).isEqualTo(title);
assertThat(posts.getContent()).isEqualTo(content);
}
}
실행된 쿼리 확인
src/main/resources
application.properties
spring.jpa.show-sql=true
다시 테스트 파일을 실행하면, 쿼리문이 표시된다.
(*) 하지만, H2의 쿼리 문법적용으로 인해 create table 쿼리에 id bigint generated by default as identify 라는 옵션으로 생성된다.
출력 쿼리 로그를 MySQL 버전으로 변경한다.
MySQL 버전 출력 쿼리로그
src/main/resources
application.properties
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
이로 인해 JPA, H2에 대한 기본기능과 설정이 됐다.
적용 전
create table posts (
id bigint generated by default as identify
)
적용 후
create table posts (
id bigint not null auto_increment
)
'Project E > Project E 파트2' 카테고리의 다른 글
[E-2-5] JPA Auditing 으로 생성시간 및 수정시간 자동화하기 (0) | 2020.01.31 |
---|---|
[E-2-4] 등록 / 수정 / 조회 API 생성 (0) | 2020.01.31 |