DB 데이터 조회

dev_itzel_02✨·2024년 4월 10일

오늘은 DB의 데이터를 가져와 클라이언트에서 데이터를 요청했을 때 서버로 넘겨주는 코드를 작성해보려 한다 . . !

# 패키지 구성

1. Entity 클래스

  • db 테이블과 매핑됨
  • @Entity → 해당 클래스가 JPA 엔터티임을 나타냄
  • @Table(name = “it-notice”) → 매핑할 db 테이블 지정
  • @Id → 클래스의 주요 식별키 primary key를 나타냄
  • @GeneratedValue(strategy = GenerationType.IDENTITY)로 자동 생성되는 값임을 설정함..?
  • @Column → 해당 필드가 db의 테이블 컬럼과 매핑됨

2. Repository 인터페이스

  • JPA를 사용해 db와 상호 작용할 수 있는 메서드 제공함
  • JpaRepository<Notice, Long> → 엔터티를 조작하기 위한 JpaRepository 인터페이스 상속
  • @Repository → 해당 클래스가 데이터 액세스 작업을 수행하는 빈임을 나타냄

3. Service 클래스

  • 비즈니스 로직 구현 클래스
  • @Service → 해당 클래스가 서비스 빈임을 나타냄
  • @Autowired → Spring이 해당 필드에 자동으로 의존성 주입하도록 함

4. Controller 클래스

  • 클라이언트로부터 HTTP 요청을 수신하고 응답을 반환함
  • @RestController → 해당 클래스가 RESTful 엔드포인트임을 나타냄
  • @RequestMapping(”/test”) → 컨트롤러가 /test 엔드포인트에 매핑됨
  • @GetMapping → HTTP GET 요청을 처리하는 메서드임을 나타냄

5. DTO 클래스

  • request에 포함된 JSON 데이터를 자바 객체로 매핑하기 위해 사용함
  • 받아서 활용할 데이터에 대한 DTO 클래스만 작성하면 됨

# 데이터 구성


위의 사진과 같이 'college'라는 테이블에는 5개의 필드가 존재하고, id가 주 식별자 키(Primary Key)이다.

>> entity 클래스 작성


entity 패키지에 college라는 테이블과 매핑할 객체를 정의하는 CollegeEntity 클래스를 생성해준다.
어노테이션 값이 테이블명과 필드명과 일치하도록 정확하게 작성해주어야 하고, 주식별자 키도 일치시켜야 한다.
아니면 데이터를 조회할 때 오류가 발생할 것이다.

>> repository 인터페이스 작성


repository 패키지 내에 db와 상호작용하기 위한 CollegeRepository 인터페이스를 생성해준다.

@Query("SELECT c.collegeEng FROM CollegeEntity c")
List<String> findCollegeEn();

위의 코드는 조회하고 싶은 필드명을 포함한 메소드를 작성해주면 JPA가 자동으로 데이터를 조회하는 쿼리문을 작성해주는 기능이다.

>> service 클래스 작성


데이터를 다루는 코드들을 작성하는 CollegeService 클래스를 생성한다.
JPA를 상속받은 repository 인터페이스를 사용하기 위해 private 변수로 선언하고, 생성자 메소드를 통해 초기화해준다.

public List<String> findAllUsers() {
    return collegeRepository.findCollegeEn();
}

리턴 타입은 String 타입의 List 형식이고, 'college' 테이블의 college_en 필드 데이터를 반환하도록 하였다.

>> controller 클래스 작성


GetMapping으로 엔드포인트를 지정해주고, collegeService 클래스의 findAllUsers() 함수를 호출한다.

클래스 작성 시 주의할 점은,,
클래스 어노테이션을 정확하게 명시해주어야 빈을 찾아 코드가 잘 수행된다는 것

>> 데이터 조회 결과


모든 학과의 영문명이 성공적으로 조회되었다 !

<참고 자료>
https://yozm.wishket.com/magazine/detail/2160/
https://kim-oriental.tistory.com/20

profile
🐜👣steadiness🐜👣

0개의 댓글