Spring(기초)-3주차-1-Repository
0. 프로젝트 설정 및 API 설계
프로젝트 초기 설정
- Language: Java
- Type: Gradle
- Group: com.review (서비스 주소, 거꾸로)
- Artifact: review03 (프로젝트 제목)
- Java: 8
라이브러리 임포트 설정
- Lombok
- Spring Web
- Spring Data JPA
- H2 Database
- MySQL Driver
API 설계하기 (CRUD)
1. Repository 만들기
- 조회, 생성, 삭제
Memo 클래스 만들기
- 메모는 1) 익명의 작성자 이름(username), 2) 메모 내용(contents) 으로 이루어짐
- domain 패키지 생성 (com.review.review03 -> domain)
- Memo 클래스 생성 (domain -> Memo.java)
1) @NoArgsConstructor: 기본 생성자 생성
2) @Getter: Getter 메소드 생성
3) @Entity: 테이블과 연계됨을 스프링에게 알림
4) @Id: Primary Key 로 사용
5) @GeneratedValue(strategy = GenerationType.AUTO): 자동 증가
6) @Column(nullable = false): 컬럼값, 반드시 값이 존재
package com.review.review03.domain;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@NoArgsConstructor // 기본생성자를 만듭니다.
@Getter
@Entity // 테이블과 연계됨을 스프링에게 알려줍니다.
public class Memo{
//public class Memo extends Timestamped { // 생성,수정 시간을 자동으로 만들어줍니다.
@GeneratedValue(strategy = GenerationType.AUTO)
@Id
private Long id;
@Column(nullable = false)
private String username;
@Column(nullable = false)
private String contents;
public Memo(String username, String contents) {
this.username = username;
this.contents = contents;
}
// public Memo(MemoRequestDto requestDto) {
// this.username = requestDto.getUsername();
// this.contents = requestDto.getContents();
// }
}
- Timestamped 클래스 생성 (domain ->Timestamped.java)
1) @MappedSuperclass: 상속받은 Entity가 자동으로 컬럼으로 인식
2) @EntityListeners(AuditingEntityListener.class): 생성/변경 시간을 자동으로 업데이트
3) @CreatedDate: 생성시간 자동 저장
4) @LastModifiedDate: 수정시간 자동 저장
5) @Getter: Getter 메소드 생성
- Timestamped 클래스 abstract 추가: 상속 받은 클래스만 생성 가능
package com.review.review03.domain;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;
@MappedSuperclass // 상속받은 Entity가 자동으로 컬럼으로 인식합니다.
@EntityListeners(AuditingEntityListener.class) // 생성/변경 시간을 자동으로 업데이트합니다.
@Getter
public abstract class Timestamped {
@CreatedDate // 생성시간
private LocalDateTime createdAt;
@LastModifiedDate // 수정시간
private LocalDateTime modifiedAt;
}
- Memo 클래스 extends 추가
package com.review.review03.domain;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@NoArgsConstructor // 기본생성자를 만듭니다.
@Getter
@Entity // 테이블과 연계됨을 스프링에게 알려줍니다.
public class Memo extends Timestamped { // 생성,수정 시간을 자동으로 만들어줍니다.
@GeneratedValue(strategy = GenerationType.AUTO)
@Id
private Long id;
@Column(nullable = false)
private String username;
@Column(nullable = false)
private String contents;
public Memo(String username, String contents) {
this.username = username;
this.contents = contents;
}
// public Memo(MemoRequestDto requestDto) {
// this.username = requestDto.getUsername();
// this.contents = requestDto.getContents();
// }
}
MemoRepository 인터페이스 만들기
- ID가 Long 타입
- MemoRepository 인터페이스 생성 (domain ->MemoRepository.java)
1) MemoRepository가 JPA를 가져다 쓴다는 의미
2) <>: 대상 넣음, 클래스: Memo, 아이디: Long
3) JPA 공식 홈페이지
4) 조건 키워드 참고하여 넣음
5) findAllByOrderByModifiedAtDesc: 모두 조회, 정렬, 수정시간, 내림차순 => 최신순으로 정렬!
public interface MemoRepository extends JpaRepository<Memo, Long> {
List<Memo> findAllByOrderByModifiedAtDesc();
}
MemoRequestDto 클래스 만들기
- 필요한 정보를 들고 다님 (username, contents)
- MemoRequestDto 클래스 생성 (domain ->MemoRequestDto.java)
1) @Getter: Getter 메소드 생성
package com.review.review03.domain;
import lombok.Getter;
@Getter
public class MemoRequestDto {
private String username;
private String contents;
}
- Memo 클래스 MemoRequestDto 메소드 추가
package com.review.review03.domain;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@NoArgsConstructor // 기본생성자를 만듭니다.
@Getter
@Entity // 테이블과 연계됨을 스프링에게 알려줍니다.
public class Memo extends Timestamped { // 생성,수정 시간을 자동으로 만들어줍니다.
@GeneratedValue(strategy = GenerationType.AUTO)
@Id
private Long id;
@Column(nullable = false)
private String username;
@Column(nullable = false)
private String contents;
public Memo(String username, String contents) {
this.username = username;
this.contents = contents;
}
// MemoRequestDto 메소드 추가
public Memo(MemoRequestDto requestDto) {
this.username = requestDto.getUsername();
this.contents = requestDto.getContents();
}
}
Application 만들기
- @EnableJpaAuditing: 데이터 변동이 있으면 JPA가 알아서 반영
package com.project.blog;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@EnableJpaAuditing // 데이터 변동이 있으면 JPA가 알아서 반영
@SpringBootApplication
public class BlogApplication {
public static void main(String[] args) {
SpringApplication.run(BlogApplication.class, args);
}
}
Author And Source
이 문제에 관하여(Spring(기초)-3주차-1-Repository), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@kju190920/Spring기초-3주차-1-Repository
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
1) @NoArgsConstructor: 기본 생성자 생성
2) @Getter: Getter 메소드 생성
3) @Entity: 테이블과 연계됨을 스프링에게 알림
4) @Id: Primary Key 로 사용
5) @GeneratedValue(strategy = GenerationType.AUTO): 자동 증가
6) @Column(nullable = false): 컬럼값, 반드시 값이 존재
package com.review.review03.domain;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@NoArgsConstructor // 기본생성자를 만듭니다.
@Getter
@Entity // 테이블과 연계됨을 스프링에게 알려줍니다.
public class Memo{
//public class Memo extends Timestamped { // 생성,수정 시간을 자동으로 만들어줍니다.
@GeneratedValue(strategy = GenerationType.AUTO)
@Id
private Long id;
@Column(nullable = false)
private String username;
@Column(nullable = false)
private String contents;
public Memo(String username, String contents) {
this.username = username;
this.contents = contents;
}
// public Memo(MemoRequestDto requestDto) {
// this.username = requestDto.getUsername();
// this.contents = requestDto.getContents();
// }
}
1) @MappedSuperclass: 상속받은 Entity가 자동으로 컬럼으로 인식
2) @EntityListeners(AuditingEntityListener.class): 생성/변경 시간을 자동으로 업데이트
3) @CreatedDate: 생성시간 자동 저장
4) @LastModifiedDate: 수정시간 자동 저장
5) @Getter: Getter 메소드 생성
package com.review.review03.domain;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;
@MappedSuperclass // 상속받은 Entity가 자동으로 컬럼으로 인식합니다.
@EntityListeners(AuditingEntityListener.class) // 생성/변경 시간을 자동으로 업데이트합니다.
@Getter
public abstract class Timestamped {
@CreatedDate // 생성시간
private LocalDateTime createdAt;
@LastModifiedDate // 수정시간
private LocalDateTime modifiedAt;
}
package com.review.review03.domain;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@NoArgsConstructor // 기본생성자를 만듭니다.
@Getter
@Entity // 테이블과 연계됨을 스프링에게 알려줍니다.
public class Memo extends Timestamped { // 생성,수정 시간을 자동으로 만들어줍니다.
@GeneratedValue(strategy = GenerationType.AUTO)
@Id
private Long id;
@Column(nullable = false)
private String username;
@Column(nullable = false)
private String contents;
public Memo(String username, String contents) {
this.username = username;
this.contents = contents;
}
// public Memo(MemoRequestDto requestDto) {
// this.username = requestDto.getUsername();
// this.contents = requestDto.getContents();
// }
}
1) MemoRepository가 JPA를 가져다 쓴다는 의미
2) <>: 대상 넣음, 클래스: Memo, 아이디: Long
3) JPA 공식 홈페이지
4) 조건 키워드 참고하여 넣음
5) findAllByOrderByModifiedAtDesc: 모두 조회, 정렬, 수정시간, 내림차순 => 최신순으로 정렬!
public interface MemoRepository extends JpaRepository<Memo, Long> {
List<Memo> findAllByOrderByModifiedAtDesc();
}
1) @Getter: Getter 메소드 생성
package com.review.review03.domain;
import lombok.Getter;
@Getter
public class MemoRequestDto {
private String username;
private String contents;
}
package com.review.review03.domain;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@NoArgsConstructor // 기본생성자를 만듭니다.
@Getter
@Entity // 테이블과 연계됨을 스프링에게 알려줍니다.
public class Memo extends Timestamped { // 생성,수정 시간을 자동으로 만들어줍니다.
@GeneratedValue(strategy = GenerationType.AUTO)
@Id
private Long id;
@Column(nullable = false)
private String username;
@Column(nullable = false)
private String contents;
public Memo(String username, String contents) {
this.username = username;
this.contents = contents;
}
// MemoRequestDto 메소드 추가
public Memo(MemoRequestDto requestDto) {
this.username = requestDto.getUsername();
this.contents = requestDto.getContents();
}
}
package com.project.blog;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@EnableJpaAuditing // 데이터 변동이 있으면 JPA가 알아서 반영
@SpringBootApplication
public class BlogApplication {
public static void main(String[] args) {
SpringApplication.run(BlogApplication.class, args);
}
}
Author And Source
이 문제에 관하여(Spring(기초)-3주차-1-Repository), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kju190920/Spring기초-3주차-1-Repository저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)