JPA (Java Persistence API ) 는 Java 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용하는 인터페이스 모음.
JPA를 사용하면 SQL이 아닌 객체 중심으로 개발할 수 있어 생산성이 좋아지고 유지보수도 수월해진다.
또한 JPA에게 객체를 저장해 패러다임의 불일치도 해결할 수 있다
SQL을 쓰지 않고 데이터를 생성, 조회, 수정, 삭제할 수 있도록 해주는 번역기
프로젝트 만들때 설정해주면 바로 사용가능
Persistence❓
데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성을 의미한다.ORM❓
Object-Relational Mapping
객체와 관계형 데이터베이스를 매핑한다는 뜻
ORM 프레임워크는 객체와 테이블을 매핑해 패러다임의 불일치를 개발자 대신 해결해준다. 객체는 객체대로 생성하고, 데이터베이스는 데이터베이스에 맞도록 설계를 가능하게 해준다. 개발자는 이를 매핑하는 방법만 전달해주면 된다.패러다임 불일치❓
데이터베이스는 데이터 중심으로 구조화되어있다. 객체의 상속, 다형성 같은 개념이없다. 그렇다보니 객체와 데이터베이스가 지향하는 점이 다르다. 이것을 객체와 데이터베이스의 패러다임 불일치라고 한다.
용어
MysQL: Table = JAVA:Domain
MYSQL: SQL = JAVA:Repository
파일을 만들고
넣어준다
@NoArgsConstructor 기본생성자를 대신 생성해줍니다.
@Entity <테이블임을 나타냄>
public class Course {
@Id // ID 값, <Primary Key로 사용하겠다는 뜻.>
@GeneratedValue(strategy = GenerationType.AUTO)
<자동 증가 명령> = <AUTO_INCREMENT>
private Long id;
@Column(nullable = false)
<컬럼 값이고 반드시 값이 존재해야 함을 나타냄> = <NOT NULL>
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;
}
}
<SETTER 는 repository 해주기 때문에 GETTER만 설정>
<JpaRepository라는 기능을 가져와서 CourseRepository에 쓸꺼다>
public interface CourseRepository extends JpaRepository<Course,Long> {
courese = 클래스
Long = ID
}
Interface:
JPA는 Interface 로만 사용할 수 있음
JPA를 사용하는 방법
public static void main(String[] args) {
SpringApplication.run(Week02Application.class, args);
}
// Week02Application.java 의 main
@Bean <보기위해 만듬>
public CommandLineRunner demo(CourseRepository repository) {
return (args) -> {
<Course를 임포트 하고 정보 넣어줌>
Course course1 = new Course("봄봄봄","김성훈");
repository.save(course1);
<정보 조회>
List<Course> courseList = repository.findAll();
for(int i = 0; i<courseList.size(); i++){
Course c = courseList.get(i);
System.out.println(c.getTitle());
System.out.println(c.getTutor());
}
};
}
}
정보가 들어간다
보인다
그냥 그냥 블로그 ([JPA] JPA란? JPA를 사용하는 이유)
어제보다 더 나은 내일을 [Spring JPA] JPA 란?
이펙티브 백엔드[JPA] 패러다임 불일치