아빠는 개발자

[JPA] CRUD 구현하기 본문

Java

[JPA] CRUD 구현하기

father6019 2024. 4. 10. 21:10
728x90
반응형

각설하고 퀵하게 가보자 

우선 디펜던시 (DB, JPA)

 

implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'mysql:mysql-connector-java'

 

테이블은 이렇게 생겼고

 

테이블 명은 keywords

 

그리곤 엔티티 

package com.doo.aqqle.domain;

import lombok.*;

import javax.persistence.*;

@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
@Setter
@Entity
@Table(
        name = "keywords",
        uniqueConstraints = {
                @UniqueConstraint(
                        columnNames = {"keyword", "use_yn"}
                )
        }
)
public class Keywords {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(length = 200, nullable = false, unique = true)
    private String keyword;

    @Column(length = 1, nullable = false, name = "use_yn")
    private String useYn;

    @Builder
    public Keywords(
            String keyword,
            String use
    ) {
        this.keyword = keyword;
        this.useYn = use;
    }
}

 

테이블명 이런거 안적어도 규칙에 따르면 엔티티 클레스명과 테이블명을 맞춰줄수 있음

 

그 다음은 repository

package com.doo.aqqle.domain;

import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface KeywordsRepository extends JpaRepository<Keywords, Long> {

    List<Keywords> findByUseYn(String use);
    List<Keywords> findByKeyword(String Keyword);
    List<Keywords> findAll();

}

 

 

마지막으로 써비스

package com.doo.aqqle.service;


import com.doo.aqqle.annotation.Timer;
import com.doo.aqqle.domain.Keywords;
import com.doo.aqqle.domain.KeywordsRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

@Service
@RequiredArgsConstructor
public class KeywordsService {

    private final KeywordsRepository keywordsRepository;
    private List<Keywords> keywords;

    @Timer
    @Transactional
    public void post(List<String> keywordList) {
        keywords = new ArrayList<>();
        keywordList.stream().forEach(x -> {
            keywords.add(new Keywords(x, "Y"));
        });
        keywordsRepository.saveAll(keywords);
    }

    @Timer
    @Transactional
    public List<Keywords> get() {
        return keywordsRepository.findAll();
    }

    @Timer
    @Transactional
    public List<Keywords> getKeywordsByUse(String use) {
        return keywordsRepository.findByUseYn(use);
    }

    @Timer
    @Transactional
    public List<Keywords> getKeywordsByKeyword(String keyword) {
        return keywordsRepository.findByKeyword(keyword);
    }

    @Timer
    @Transactional
    public boolean put(Long id, String useYn) {
        Keywords keywords = keywordsRepository.findById(id).orElse(null);
        if (keywords != null) {
            keywords.setUseYn(useYn);
            if (keywordsRepository.save(keywords) != null){
                return true;
            } else {
                return false;
            }
        }
        return false;
    }

}

 

put 메소드를 보면 우선 ID 로 대상을 검색하고 검색된 대상에 대해서 데이터를 갱신해주고 다시 save 한다. 

CrudRepository인터페이스의 findById 메소드는 Optional 이므로 orElse 일때 null 로 처리 하게 해준다. 

728x90
반응형