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타입>
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 |
댓글