DB 사용하기

2023. 1. 16. 17:35·Programming/Spring

의존성 설정하기

Maven의 경우에는 pom.xml

Gradle의 경우에는 build.gradle 파일에 아래의 내용을 추가합니다.

저는 Gradle로 작업했습니다.

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'

 

Entity 생성하기

  • 테이블에 입력할 데이터를 취급하는 클래스
public class Hello {
    private long id;
    private String name;
    private String author;

    public Hello(long id, String name, String author){
        this.id = id;
        this.name = name;
        this.author = author; 
    }
    public long getId() {
        return id;
    }
    public String getName() {
        return name;
    }
    public String getAuthor() {
        return author;
    }

    @Override
    public String toString() {
        return "Hello [id=" + id + ", name=" + name + ", author=" + author + "]";
    }
}

위 클래스에 있는 코드에 딱 3가지 어노테이션을 입력하겠습니다.

@Entity
public class Hello {
    @Id
    @GeneratedValue
    private long id;
        //@Column(name="my_name")
    private String name;
    private String author;

    public Hello(long id, String name, String author){
        this.id = id;
        this.name = name;
        this.author = author; 
    }
    public long getId() {
        return id;
    }
    public String getName() {
        return name;
    }
    public String getAuthor() {
        return author;
    }

    @Override
    public String toString() {
        return "Hello [id=" + id + ", name=" + name + ", author=" + author + "]";
    }
}

이제 서버를 구동하고 H2데이터베이스를 확인해보겠습니다.

왼쪽에 보면 HELLO라고 적인 테이블이 보입니다.

이제 저걸 클릭해보면

이렇게 자동으로 테이블의 모든 값을 출력하는 쿼리문이 생성됩니다.

쿼리문을 실행해보겠습니다.

우리가 자바 코드에서 생성한 필드값들이 데이터베이스 테이블 컬럼에 똑같이 생성되어있습니다.

  • @Entity
    • Entity 매핑은 자바클래스와 데이터베이스의 테이블 간의 매핑을 정의하게 해준다.
    • 테이블 이름을 클래스 이름과 다르게 지정하고 싶은 경우
      • @Entity(name=”변경할 이름”)
  • @Id
    • 데이터베이스 테이블의 Primary-key를 지정하는 어노테이션
  • @GeneratedValue
    • 아이디 값을 직접 지정하지 않아도 자동으로 생성시키는 어노테이션
  • @Column(name=”컬럼명”)
    • 테이블 컬럼 이름을 변경할 수 있다.

더미데이터 입력하기

데이터베이스에 더미데이터를 입력해야하는데

H2-console에서 모든 값에 대한 쿼리문을 하나 하나 입력하는 것은 매우 귀찮습니다.

더욱이 앱을 재가동하면 입력한 데이터가 싹 사라지므로

같은 작업을 매번 반복하게 되는 아주 귀찮고도 짜증나는 일이 생깁니다.

그러므로 우리는 더미데이터를 생성하는 쿼리문을 미리 작성해두고 시작합니다.

  • 쿼리문 생성
    • 빈 페이지를 생성하고 이름을 data.sql 이라고 짓고resources 디렉터리에 넣는다.
      서버 구동중에 sql파일을 생성하면 아래와같은 에러가 발생하는데,
      이것은 sql파일 안에 어떤 코드도 작성되어 있지 않기 때문에 발생하는 에러입니다.

저는 다음과 같이 더미데이터를 입력하였습니다.

이제 H2-console에서 확인해보죠

완벽하죠 정말 러블리합니다.

API만들기 - findAll()

이번에는 데이터베이스의 모든 데이터를 한번에 출력해주는 코드를 자바로 구현해보겠습니다.

우선 필요한 모든 클래스를 다시 한번 체크해보겠습니다.

  • Entity 클래스
@Entity
public class Hello {
    @Id
    @GeneratedValue
    private long id;
    private String name;
    private String author;

    // Entity클래스는 반드시 기본 생성자가 있어야한다.
    public Hello(){}

    public Hello(long id, String name, String author){
        this.id = id;
        this.name = name;
        this.author = author; 
    }
    public long getId() {
        return id;
    }
    public String getName() {
        return name;
    }
    public String getAuthor() {
        return author;
    }

    @Override
    public String toString() {
        return "Hello [id=" + id + ", name=" + name + ", author=" + author + "]";
    }
}

데이터베이스의 Entity기능을 하는 클래스입니다.

Entity 담당 클래스 생성시 기본 생성자(Constructor)를 만들어야지 에러가 나지 않습니다.

  • Spting JPA 사용을 위한 Interface
public interface HelloRepository extends JpaRepository<Hello, Long> {

}

Spring JPA를 이용하기 위해서는 JpaRepository 를 상속할 필요가 있습니다.

상속시 <>(제네릭) 안에 이용할 Entity와 Id의 타입을 입력해주어야합니다.

이번에 이용할 Entity 객체는 Hello이고, Id타입은 Long입니다.

  • Controller 클래스
@RestController
public class Controller {

    @Autowired
    private HelloRepository repository;

    @GetMapping("/hello")
    public List<Hello> getAllHello(){
        return repository.findAll();
    }
}

Controller객체에서는 지정한 url에 접속했을 때 데이터베이스에

저장한 모든 값들을 출력시키도록 할겁니다.

우선 먼저 데이터베이스의 Entity를 불러오기 위해 HelloRepository 를 Spring이 인식하도록

@Autowired를 설정합니다.

repository 에 findAll 메서드를 사용하는데,

findAll메서드는 데이터베이스 테이블 안의 모든 값을 보여주는 메서드로,

SQL의 SELECT * FROM HELLO; 쿼리문과 같은 기능입니다.

위와 같이 코드를 작성하고 서버를 구동하면

이렇게 데이터베이스의 값들을 JSON형식으로 보내줍니다.

'Programming/Spring' 카테고리의 다른 글
  • JDBC (Java Database Connectivity)
  • H2 메모리 데이터베이스
  • Spring 시작하기
쿠키크럼블
쿠키크럼블
  • 쿠키크럼블
    CC Studio
    쿠키크럼블
  • 전체
    오늘
    어제
    • Category (54)
      • AI Knowledge (3)
        • Basic (2)
        • MachineLearning (0)
        • DeepLearning (0)
        • OpenCV (1)
      • Programming (6)
        • Java (2)
        • Spring (4)
      • 코테 준비 (45)
        • 알고리즘 (3)
        • 백준 (42)
      • 낙서장 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 관리
  • 링크

    • My GitHub
  • 공지사항

  • 인기 글

  • 태그

    힙
    집합과맵
    우선순위 큐
    큐
    DP
    브루트포스
    정수론
    에라토스테네스의체
    매개변수탐색
    이분탐색
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
쿠키크럼블
DB 사용하기
상단으로

티스토리툴바