JDBC
- 자바 언어로 데이터베이스 프로그래밍을 하기 위한 라이브러리
- 매번 연결을 해주어야 되고 날것의 코드이다 그래서 나온것이 JPA이다.
JPA
- java ORM 기술에 대한 인터페이스
- 데이터베이스의 데이터와 객체,클래스와 맵핑을 해주는 기술에 대한 인터페이스
- JPA를 구현한 것이 Hibernate,EclipseLik, DataNucleus, OpenJpa등 이다.
Hibernate
- JPA의 인터페이스를 구현한 라이브러리
- 하지만 이것도 persist, 트랜잭션 관리등의 코드를 짜야한다
- 이래서 spring data JPA로 관리할 수 있다.
spring data JPA
Spring Data JPA
I) setting
- dependency에 추가해서 사용(mysql, spring data jpa)
- application properties
- 프로젝트에 대한 여러가지 설정 값들을 지정하는 파일
- yaml로 바꾸고
spring:
jpa:
show-sql: true
properties:
format_sql: true
dialect: org.hibernate.dialect.MySQL8Dialect
hibernate:
ddl-auto: validate
datasource:
url: jdbc:mysql://localhost:3306/user?useSSL=false&useUnicode=true&allowPublicKeyRetrieval=true
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: root123!
연결
- 이제 맵핑을 하기 전에 기본적으로 user패키지를 생성하고 conroller와 db 패키지를 생성하고 db패키지에 entity를 생성한다.
- 어노테이션으로 data,noarg,allarg,builder를 달아주고 마지막으로 @Entity(name="user")으로 달아준다.
import jakarta.persistence.Id;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.mapping.PrimaryKey;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity(name="user")
public class userentity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private Integer age;
private String email;
}
여기까지가 orm 매핑
- 이제 jpa가 제공하는 repository생성
package com.example.spring.boot.jpa.user.db;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<UserEntity,Long> {
}
- 인터페이스까지리 때문에 extends이고 id가 long타입이기 때문에 Long
- 이렇게하면 애당 japrepository라는 spring boot에서 관리하는 인터페이스가 있고 이것을 구현한 simplejparepository라는 것이 있다. 이것을 추상화된 클래스를 작성해놨기때문에 제공하는 인터페이스만으로 사용
이제 contorller에서 데이터 불러와보자
package com.example.spring.boot.jpa.user.controller;
import com.example.spring.boot.jpa.user.db.UserEntity;
import com.example.spring.boot.jpa.user.db.UserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RequiredArgsConstructor
@RestController
@RequestMapping("/api/user")
public class UserApiController {
private final UserRepository userRepository;
@GetMapping("/findall")
public List<UserEntity> findALL(){
return userRepository.findAll();
}
@GetMapping("/name")
public void auto_save(@RequestParam String name){
var user = UserEntity.builder()
.name(name)
.build();
userRepository.save(user);
}
}