본문 바로가기
Spring/개념지식 및 에러사항

[Spring] JPA 기초

by 태옹 2021. 7. 12.

JPA

SQL을 쓰지 않고 데이터를 생성, 조회, 수정, 삭제할 수 있도록 해주는 번역기

 

JPA가 필요한 이유

1. SQL문 일일이 쓰고 있다가 시간 다 감

2. 기존에 mysql쓰다가 oracle을 사용하려는 경우 sql문법에 대한 검토를 하기 굉장히 번거로움

 

예시

아래의 JPA 사용 코드를 SQL문으로 자동으로 번역해줌

repository.save(new Customer("Taeong",23));

 

JPA 사용 전 알아야 할 개념

1. Domain(Entity) = table

테이블이랑 1:1 대응됨

2. Repository = sql

SQL의 역할을 함

repository에 써 있는 코드가 JPA코드를 사용하는 것과 같음

 

 

JPA 사용하기

현재의 디렉토리 구조는 다음과 같다.

 

course테이블을 생성하는 sql쿼리

CREATE TABLE IF NOT EXISTS courses (
    id bigint(5) NOT NULL AUTO_INCREMENT, 
    title varchar(255) NOT NULL,
    tutor varchar(255) NOT NULL,
    PRIMARY KEY (id)
);

아래의 코드는 해당 sql문을 @Entity 어노테이션을 사용하여 자바코드로 변환한 것이다.

sql문과 아래의 자바 코드를 비교해보자.

 

 

Course.java(class) = 테이블의 역할

package com.sparta.week02.domain;

import lombok.NoArgsConstructor;

import javax.persistence.*;


@NoArgsConstructor // 기본생성자를 대신 생성해줍니다.
@Entity // 테이블임을 나타냅니다.
public class Course {

    @Id // ID 값, Primary Key로 사용하겠다는 뜻입니다.
    @GeneratedValue(strategy = GenerationType.AUTO) // 자동 증가 명령입니다.
    private Long id;

    @Column(nullable = false) // 컬럼 값이고 반드시 값이 존재해야 함을 나타냅니다.
    private String title;

    @Column(nullable = false)
    private String tutor;

    public String getTitle() {
        return this.title;
    }

    public String getTutor() {
        return this.tutor;
    }

    public Course(String title, String tutor) {
        this.title = title;
        this.tutor = tutor;
    }
}

 

 

CourseRepository.java(interface) = sql쿼리의 역할

package com.sparta.week02.domain;

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

public interface CourseRepository extends JpaRepository<Course, Long> {
}

JpaRepository를 상속받는 코드

 

<Course, Long> : <클래스, id타입>

 

repository.만 쳐도 sql관련된 메소드들이 쫘라락 뜸 -> 이게 JPA의 기능

package com.sparta.week02;

import com.sparta.week02.domain.Course;
import com.sparta.week02.domain.CourseRepository;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

import java.util.List;

@SpringBootApplication
public class Week02Application {

    public static void main(String[] args) {
        SpringApplication.run(Week02Application.class, args);
    }

    // Week02Application.java 의 main 함수 아래에 붙여주세요.
    @Bean
    public CommandLineRunner demo(CourseRepository repository) {
        return (args) -> {
            /* 중요 코드 */
            Course course1 = new Course("웹개발의 봄 Spring", "태옹");
            repository.save(course1);	// 데이터 저장 (insert기능)

            List<Course> courseList = repository.findAll();   //리턴타입 : list이기 때문에 리스트 변수 생성해 줌
			// 데이터 조회 (select기능)
            
            for(int i=0; i<courseList.size(); i++){
                Course c = courseList.get(i);
                System.out.println(c.getTitle());
                System.out.println(c.getTutor());
            }
        };
    }
}

'Spring > 개념지식 및 에러사항' 카테고리의 다른 글

[MyBatis] 동적 SQL  (0) 2021.08.08
[Spring] JPA CRUD  (0) 2021.07.13
RestController 생성하기  (0) 2021.07.05
Log4j import에러  (0) 2021.07.02
JUnit import 안되는 경우  (0) 2021.07.02

댓글