[코스파] 스프링 기초 2주차-2

2021. 12. 5.·강의정리들/[2021] Spring Boot
목차
  1. 상속의 개념
  2. CRUD : Create Read Update Delete
  3. 스프링의 구조
  4. Lombok :
  5. DTO : Data Transfer Object : 데이터를 주고받을 때는 새로운 클래스를 만들자?
반응형

2주차 내용-2 

상속의 개념

Extends : 클래스의 상속

class Person {
    private String name;
    private String getName() {
        return this.name;
    }
}
class Tutor extends Person {
    private String address;
    // Person 클래스를 상속했기 때문에,
    // name 멤버변수와 getName() 메소드를 가지고 있습니다.
}

 

DB의 기본은 생성일자와 수정일자!

@MappedSuperclass // 상속했을 때, 컬럼으로 인식하게 합니다.
@EntityListeners(AuditingEntityListener.class)
// 생성/수정 시간을 자동으로 반영하도록 설정
public abstract class Timestamped {
    @CreatedDate // 생성일자임을 나타냅니다.
    private LocalDateTime createdAt;
    @LastModifiedDate // 마지막 수정일자임을 나타냅니다.
    private LocalDateTime modifiedAt;

Ø  domain 패키지 내 Timestamped.java 클래스 생성

LocalDateTime : 자료형, 시간을 나타내는 자바 자료형

Abstract : 추상클래스, 직접구현x 상속으로만 구현 가능하다.

@EnableJpaAuditing

Ø  Week02Application 에 추가 : 생성일자 수정일자에 따라 자동업데이트됨

CRUD : Create Read Update Delete

Course course = repository.findById(1L).orElseThrow(
        () -> new NullPointerException("해당 아이디 없습니다.")

^ Repository.findById  할 경우 존재하지 않을 경우의 예외 처리방법도 정해줘야 함

스프링의 구조

1. Controller : 가장 바깥 / 요청과 응답 처리

2. Service : 중간 / 실제 작동이 일어남                 > Update 는 이부분에서 작성

3. Repository : 가장 안쪽, DB 와 맞닿아 있음

Ø  Course 클래스에 update 메소드 추가

public void update(Course course) {
    this.title = course.title;
    this.tutor = course.tutor;

Ø  Sevice 패키지 생성 후 CourseService.java  생성

@Service // 스프링에게 이 클래스는 서비스임을 명시
public class CourseService {
    // final: 서비스에게 꼭 필요한 녀석임을 명시
    private final CourseRepository courseRepository;
    // 생성자를 통해, Service 클래스를 만들 때 꼭 Repository를 넣어주도록
    // 스프링에게 알려줌
    public CourseService(CourseRepository courseRepository) {
        this.courseRepository = courseRepository;
    }
    @Transactional // SQL 쿼리가 일어나야 함을 스프링에게 알려줌
    public Long update(Long id, Course course) {
        Course course1 = courseRepository.findById(id).orElseThrow(
                () -> new IllegalArgumentException("해당 아이디가 없음.")
        );
        course1.update(course);
        return course1.getId();

Ø  업데이트

@Bean
public CommandLineRunner demo(CourseRepository courseRepository, CourseService courseService) {
    return (args) -> {
        courseRepository.save(new Course("프론트엔드의 꽃, 리액트", "임민영"));
        System.out.println("데이터 인쇄");
        List<Course> courseList = courseRepository.findAll();
        for (int i=0; i<courseList.size(); i++) {
            Course course = courseList.get(i);
            System.out.println(course.getId());
            System.out.println(course.getTitle());
            System.out.println(course.getTutor());
        }
        Course new_course = new Course("웹개발의 봄, Spring", "임민영");
        courseService.update(1L, new_course);
        courseList = courseRepository.findAll();
        for (int i=0; i<courseList.size(); i++) {
            Course course = courseList.get(i);
            System.out.println(course.getId());
            System.out.println(course.getTitle());
            System.out.println(course.getTutor());
        }
    };
}

"프론트엔드의 꽃 리액트"에서 "웹개발의 봄, 스프링"으로 데이터가 업데이트 되어 출력된다 .

courseRepository.deleteAll();

Ø  삭제

Lombok :

롬복은 자바 프로젝트에서 필수적으로 필요한 메소드/생성자들을 자동생성해줌으로써 코드를 절약할 수 있게 도와주는 라이브러리

Ø  Settting > Annotation Precessors > Enable 체크 > plugins > Lombok 설치

Ø  @Getter 입력으로 get 메소드 자동생성

Ø  @NoArgsConstructor : 기본 생성자 생성

Ø  @RequiredArgsConstructor : 필수 인자를 가진 생성자를 자동 생성해주는 어노테이션입니다.  즉 final 이나 @NonNull 어노테이션이 붙은 맴버변수 필드만 파라미터로 받는 생성자를 만들어 줍니다.

@RequiredArgsConstructor&nbsp;

DTO : Data Transfer Object : 데이터를 주고받을 때는 새로운 클래스를 만들자?

package com.sparta.week02.domain;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@RequiredArgsConstructor
public class CourseRequestDto {
private final String title;
private final String tutor;
}

^CorseRequestDto.java 만들기 생성

생성 후 아래와 같이 update 에서 Course를  CourseRequestDto 로 

course 를 requestDto 로 course.title 을 requestDto.getTitle() 로 변경해준다.

Course.java
CourseService.java

 

반응형

'강의정리들 > [2021] Spring Boot' 카테고리의 다른 글

[코스파] 스프링 기초 4주차-2  (0) 2022.01.02
[코스파] 스프링 기초 4주차-1  (0) 2022.01.02
[코스파] 스프링 기초 3주차  (0) 2022.01.01
[코스파] 스프링 기초 2주차-3  (0) 2021.12.05
[코스파] 스프링 기초 2주차-1  (0) 2021.12.03
  1. 상속의 개념
  2. CRUD : Create Read Update Delete
  3. 스프링의 구조
  4. Lombok :
  5. DTO : Data Transfer Object : 데이터를 주고받을 때는 새로운 클래스를 만들자?
'강의정리들/[2021] Spring Boot' 카테고리의 다른 글
  • [코스파] 스프링 기초 4주차-1
  • [코스파] 스프링 기초 3주차
  • [코스파] 스프링 기초 2주차-3
  • [코스파] 스프링 기초 2주차-1
keartt
keartt
shalpha_2@naver.com
주니어 탈출일기 🐽
shalpha_2@naver.com
  • keartt
전체
오늘
어제
  • 전체보기
    • CS & 알고리즘
      • CS (컴과학)
      • 알고리즘
      • 백준
    • Spring
      • SpringBoot (JPA)
      • Spring (Legacy)
    • Server
      • Linux
      • Docker
    • Java
      • Design Pattern
    • PostgreSQL
    • GIS (공간정보)
    • 오류정리
    • Git
    • JavaScript
      • Node.js
      • React
    • Tool
      • IntelliJ
      • MacOS
      • VSCode
      • Eclipse
      • Other
    • 강의정리들
      • [2023] FullStack
      • [2022] Spring Boot
      • [2021] Spring Boot

인기 글

태그

구간합
코딩애플
이분탐색
브루트포스
반응형
hELLO· Designed By정상우.v4.6.1
keartt
[코스파] 스프링 기초 2주차-2

개인정보

kearttshalpha_2@naver.com계정관리

운영중인 블로그

주니어 탈출일기쓰기블로그 관리

이동링크목록

  • 티스토리 홈
  • 피드
  • 로그아웃
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.