[SPRING] 메모장 프로젝트 SPRING JPA 적용

라미·2024년 2월 26일
0

spring

목록 보기
13/17
post-thumbnail

SPRING BOOT에 JPA 적용시키기

이번에는 JPA에 대해 배운 내용을 바탕으로 메모 프로젝트에 JPA를 적용시키는 걸 배웠다.


build.gradle 설정

dependencies {
    // JPA 의존성 추가
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

    // jdbc 제거 (JPA STATER에서 다 가져오기 때문에 필요 없다!)
    //implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'

}

application.properties 설정

# Hibernate 설정 추가
spring.jpa.hibernate.ddl-auto=update

# Hibernate가 자동으로 만들어 주는 sql을 보기 좋게 해준다
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.use_sql_comments=true

🔔 hibernate.ddl-auto의 5가지 옵션
creat : 기존에 있던 테이블을 전부 삭제하고 다시 생성 (drop + creat)
create-drop : 종료시점에 테이블을 drop
update : 변경된 부분만 반영, 테이블이 없으면 만들고 있으면 만들지 않는다
validate : Entity와 table이 정상적으로 mapping이 됐는지만 확인한다
none : 아무것도 하지 않는다



memoRepository.java

Spring Data JPA 사용, db의 테이블과 연결되어 CRUD 작업을 하는 인터페이스

public interface MemoRepository extends JpaRepository<Memo, Long> {  //JpaRepository 등록

}

memoService.java

코드가 엄청나게 간결해졌다. JPA 미친녀석...!

@Service
public class MemoService {
    private final MemoRepository memoRepository;

    public MemoService(MemoRepository memoRepository) {
        // 생성자를 통해 생성이 될때 jdbcTemplate 을 받으면서 memoRepository 생성
        this.memoRepository = memoRepository;
    }

    public MemoResponseDto createMemo(MemoRequestDto requestDto) {
        // RequestDto -> Entity
        Memo memo = new Memo(requestDto);

        // DB 저장
        Memo saveMemo = memoRepository.save(memo); // db에 저장

        // Entity -> ResponseDto
        MemoResponseDto memoResponseDto = new MemoResponseDto(memo);

        return memoResponseDto;
    }

    public List<MemoResponseDto> getMemos() {

        // DB 조회
        return memoRepository.findAll().stream().map(MemoResponseDto::new).toList();

    }

    @Transactional //update는 변경감지를 위해 Transactional을 추가해줬따
    public Long updateMemo(Long id, MemoRequestDto requestDto) {

        // DB
        // 해당 메모가 DB에 존재하는지 확인
        Memo memo = findMemo(id);

        // memo 내용 수정 dirty  cheking한다
        memo.update(requestDto);

        return id;
    }

    public Long deleteMemo(Long id) {
        // 해당 메모가 DB에 존재하는지 확인
        Memo memo = findMemo(id);

        // memo 삭제 지울 객체를 넘긴다
        memoRepository.delete(memo);

        return id;
    }

    private Memo findMemo(Long id) {
        return memoRepository.findById(id).orElseThrow(() -> //null 이아니면 반환이 잘 되고 null이면 throw를 던진다
                new IllegalArgumentException("선택한 메모는 존재하지 않습니다.")
        );
    }
    
}
```# SPRING BOOT에 JPA 적용시키기
이번에는 JPA에 대해 배운 내용을 바탕으로 메모 프로젝트에 JPA를 적용시키는 걸 배웠다.

---

# build.gradle 설정
```gradle
dependencies {
    // JPA 의존성 추가
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

    // jdbc 제거 (JPA STATER에서 다 가져오기 때문에 필요 없다!)
    //implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'

}

application.properties 설정

# Hibernate 설정 추가
spring.jpa.hibernate.ddl-auto=update

# Hibernate가 자동으로 만들어 주는 sql을 보기 좋게 해준다
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.use_sql_comments=true

🔔 hibernate.ddl-auto의 5가지 옵션
creat : 기존에 있던 테이블을 전부 삭제하고 다시 생성 (drop + creat)
create-drop : 종료시점에 테이블을 drop
update : 변경된 부분만 반영, 테이블이 없으면 만들고 있으면 만들지 않는다
validate : Entity와 table이 정상적으로 mapping이 됐는지만 확인한다
none : 아무것도 하지 않는다



memoRepository.java

Spring Data JPA 사용, db의 테이블과 연결되어 CRUD 작업을 하는 인터페이스

public interface MemoRepository extends JpaRepository<Memo, Long> {  //JpaRepository 등록

}

memoService.java

코드가 엄청나게 간결해졌다. JPA 미친녀석...!

@Service
public class MemoService {
    private final MemoRepository memoRepository;

    public MemoService(MemoRepository memoRepository) {
        // 생성자를 통해 생성이 될때 jdbcTemplate 을 받으면서 memoRepository 생성
        this.memoRepository = memoRepository;
    }

    public MemoResponseDto createMemo(MemoRequestDto requestDto) {
        // RequestDto -> Entity
        Memo memo = new Memo(requestDto);

        // DB 저장
        Memo saveMemo = memoRepository.save(memo); // db에 저장

        // Entity -> ResponseDto
        MemoResponseDto memoResponseDto = new MemoResponseDto(memo);

        return memoResponseDto;
    }

    public List<MemoResponseDto> getMemos() {

        // DB 조회
        return memoRepository.findAll().stream().map(MemoResponseDto::new).toList();

    }

    @Transactional //update는 변경감지를 위해 Transactional을 추가해줬따
    public Long updateMemo(Long id, MemoRequestDto requestDto) {

        // DB
        // 해당 메모가 DB에 존재하는지 확인
        Memo memo = findMemo(id);

        // memo 내용 수정 dirty  cheking한다
        memo.update(requestDto);

        return id;
    }

    public Long deleteMemo(Long id) {
        // 해당 메모가 DB에 존재하는지 확인
        Memo memo = findMemo(id);

        // memo 삭제 지울 객체를 넘긴다
        memoRepository.delete(memo);

        return id;
    }

    private Memo findMemo(Long id) {
        return memoRepository.findById(id).orElseThrow(() -> //null 이아니면 반환이 잘 되고 null이면 throw를 던진다
                new IllegalArgumentException("선택한 메모는 존재하지 않습니다.")
        );
    }
    
}

0개의 댓글