buildscript {
ext {
springBootVersion = '2.1.7.RELEASE'
}
repositories {
mavenCentral()
jcenter()
}
dependencies {
// 처음 생성하면 나오던 코드
// testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
// testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
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.coocon.scraping'
version '1.0.0-SNAPSHOT-' + new Date().format("yyyyMMddHHmmss")
repositories {
mavenCentral()
jcenter()
}
dependencies {
implementation 'org.testng:testng:7.1.0'
compile('org.springframework.boot:spring-boot-starter-web')
compile('org.projectlombok:lombok')
testCompile "org.projectlombok:lombok"
annotationProcessor('org.projectlombok:lombok')
testAnnotationProcessor('org.projectlombok:lombok')
// Spring DATA JPA 적용하기
compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('com.h2database:h2')
// testCompile "junit:junit:4.12"
testCompile('org.springframework.boot:spring-boot-starter-test')
}
Posts 클래스의 Code
package scraping.coocon.com.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;
}
}
Posts 클래스는 실제 DB의 테이블과 매칭될 클래스
보통 Entity 클래스라고 부름
JPA를 사용하면 DB 데이터에 작업할 경우, Entity 클래스의 수정을 통해 작업
@Entity
@Id
@GeneratedValue
Column
@NoArgsConstructor
@Getter
@Builder
package scraping.coocon.com.domain.posts;
import org.springframework.data.jpa.repository.JpaRepository;
public interface PostsRepository extends JpaRepository<Posts, Long> {
}
package scraping.coocon.com.web.domain.posts;
import javafx.beans.binding.BooleanExpression;
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 scraping.coocon.com.domain.posts.Posts;
import scraping.coocon.com.domain.posts.PostsRepository;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest
public class PostsRepositoryTest {
@Autowired
PostsRepository postsRepository;
@After
public void cleanup() {
postsRepository.deleteAll();
}
@Test
public void 게시글저장_불러오기() {
//given
String title = "테스트 게시글";
String content = "테스트 본문";
postsRepository.save(Posts.builder().title(title)
.content(content)
.author("goodzlmn@naver.com")
.build());
//when
List<Posts> postsList = postsRepository.findAll();
//then
Posts posts = postsList.get(0);
assertThat(posts.getTitle()).isEqualTo(title);
assertThat(posts.getContent()).isEqualTo(content);
}
}
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect