航行10日目


Java Spring 3週目レッスン
1.設計API
2.Repository設定の注意事項
3.サービス設定の注意事項
4.コントローラ設定の注意事項
5.3週間の課題と24時間ごとのデータ初期化方法

1.設計API

  • は、必要な機能を特定し、必要に応じて対応するAPI
  • を設計する
  • と同じURLであっても、方法が異なると他のウィンドウ
  • となる.
  • 逆転
  • とは何かを明確にする
    ex)

    注記を作成するときは、作成した注記を返す必要があります.
    コメントを表示するには、生成されたコメントのリストを指定する必要があります.
    コメントの変更と削除にはid値が必要です.

    2.Repository設定の注意事項

  • をインポートできない場合はalt+enterをインポートします.
  • オブジェクトクラスの必須Import-@NorargConstructor(基本ジェネレータの作成),@Getter(情報の受信,ライフサイクル),@Entity(テーブルとテーブル)
  • タイムスタンプの必須Import-@MappedSuperClass(継承されたクラスを自動的に生成する場合と変更時間をカラーで表示する場合)、@EntityListener(変更時に自動的に変更)、PublicとClassの間を抽象的に継承します.(リストを作成できません)
  • requestDtoに必要なImport-@Getter(テーブルに直接触れないように作成されているため、値を受け入れてループします),@RequiredArgConstructor(この権限を持つ)
  • Repositoryに必要なImport-.Javaファイルではなくインタフェースファイルとして作成する必要があります.Jpa Repositoryを継承し、findAllなどの便利な機能を使用したり、<>の材料を使用したり、リストのソート基準を追加したりすることができます.
    ex)
  • //findALL 다찾아주고 ByModifiedAtBetween지정시간 사이의 ByOrderBy 정렬시켜라 ModifiedAt 시간을 기준으로 Desc 내림차순 (최근순) start,end 값은 등록한 시간으로 부터 24시간이내의 것으로 설정함
    
    List<Memo> findAllByModifiedAtBetweenOrderByModifiedAtDesc(LocalDateTime start, LocalDateTime end);

    3.サービス設定の注意事項

  • APIはメソッドを設定せず、すべてサービスで作成して使用します.オブジェクトクラスから受信値の設定-サービスメソッドの設定-APIでメソッド
  • を実行
  • @RequiredArgConstructor(ライセンス),@Service(これはサービス)
    3.private final repository名称インポート情報
  • を入力

    4.コントローラ設定の注意事項

  • private finalリポジトリ名、サービス名を入力して情報をインポート
    2.@RestController、@RequiredArgConstructor(承認)
  • 5.3週ごとの問題コードと24時間ごとのデータ初期化方法


    main.java
    package com.sparta.week03.domain;
    
    import lombok.Getter;
    import lombok.NoArgsConstructor;
    
    import javax.persistence.*;
    import java.time.LocalDate;
    import java.time.LocalDateTime;
    import java.time.LocalTime;
    import java.util.List;
    
    @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();
        }
        public void update(MemoRequestDto requestDto) {
            this.username = requestDto.getUsername();
            this.contents = requestDto.getContents();
        }
    
    }
    
    Repository.interface
    package com.sparta.week03.domain;
    
    import org.apache.tomcat.jni.Local;
    import org.springframework.data.jpa.repository.JpaRepository;
    
    import java.time.LocalDateTime;
    import java.util.List;
    
    
    public interface MemoRepository extends JpaRepository<Memo, Long> {
        //findALL 다찾아주고 ByOrderBy 정렬시켜라 ModifiedAt 시간을 기준으로 Desc 내림차순 (최근순)
        List<Memo> findAllByModifiedAtBetweenOrderByModifiedAtDesc(LocalDateTime start, LocalDateTime end);
    }
    
    RequestDto
    package com.sparta.week03.domain;
    
    
    import lombok.Getter;
    import lombok.RequiredArgsConstructor;
    import lombok.Setter;
    import org.springframework.stereotype.Service;
    
    @Getter
    @RequiredArgsConstructor
    public class MemoRequestDto {
        private  final String username;
        private  final String contents;
    
    }
    
    Timestamped
    package com.sparta.week03.domain;
    
    import lombok.Getter;
    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;
    
    @Getter
    @MappedSuperclass // Entity가 자동으로 컬럼으로 인식합니다.
    @EntityListeners(AuditingEntityListener.class) // 생성/변경 시간을 자동으로 업데이트합니다.
    public abstract class Timestamped {
    
        @CreatedDate
        private LocalDateTime createdAt;
    
        @LastModifiedDate
        private LocalDateTime modifiedAt;
    }
    Service
    package com.sparta.week03.service;
    
    import com.sparta.week03.domain.Memo;
    import com.sparta.week03.domain.MemoRepository;
    import com.sparta.week03.domain.MemoRequestDto;
    import lombok.RequiredArgsConstructor;
    import org.springframework.stereotype.Service;
    
    import javax.transaction.Transactional;
    
    @RequiredArgsConstructor
    @Service
    public class MemoService {
    
        private final MemoRepository memoRepository;
    
        @Transactional
        public Long update(Long id, MemoRequestDto requestDto) {
            Memo memo = memoRepository.findById(id).orElseThrow(
                    () -> new IllegalArgumentException("아이디가 존재하지 않습니다.")
            );
            memo.update(requestDto);
            return id;
        }
    }
    Controller
    package com.sparta.week03.controller;
    
    import com.sparta.week03.domain.Memo;
    import com.sparta.week03.domain.MemoRepository;
    import com.sparta.week03.domain.MemoRequestDto;
    import com.sparta.week03.service.MemoService;
    import lombok.RequiredArgsConstructor;
    import org.apache.tomcat.jni.Local;
    import org.springframework.web.bind.annotation.*;
    
    import java.time.LocalDateTime;
    import java.util.List;
    
    
    @RestController
    @RequiredArgsConstructor
    public class MemoController {
        private final MemoRepository memoRepository;
        private final MemoService memoService;
    
        @PostMapping("/api/memos")
        public Memo createMemo(@RequestBody MemoRequestDto requestDto){
            Memo memo = new Memo(requestDto);
            return memoRepository.save(memo);
        }
    
        @GetMapping("/api/memos")
        public List<Memo> readMemo() {
            LocalDateTime now = LocalDateTime.now();
            LocalDateTime yesterday = LocalDateTime.now().minusDays(1);
            return memoRepository.findAllByModifiedAtBetweenOrderByModifiedAtDesc(yesterday, now);
        }
    
        @DeleteMapping("/api/memos/{id}")
        public Long deleteMemo(@PathVariable Long id){
            memoRepository.deleteById(id);
            return id;
        }
    
        @PutMapping("/api/memos/{id}")
        public Long updateMemo(@PathVariable Long id, @RequestBody MemoRequestDto requestDto) {
            memoService.update(id, requestDto);
            return id;
        }
    }
    
  • データ初期化設定方法
  • リポジトリからデータを消去する変数
  • を設定する.
    List<Memo> findAllByModifiedAtBetweenOrderByModifiedAtDesc(LocalDateTime start, LocalDateTime end);
    2.コントロールで開始と終了の間隔を設定した後、変数を代入する
     LocalDateTime now = LocalDateTime.now();
            LocalDateTime yesterday = LocalDateTime.now().minusDays(1);
            return memoRepository.findAllByModifiedAtBetweenOrderByModifiedAtDesc(yesterday, now);