Spring data

이서영·2024년 5월 24일

SpringBoot

목록 보기
4/7

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 //primary key
    @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;
// 스프링으로부터 repository를 주입받기 위해서
@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);

    }
}

profile
전공자 학생

0개의 댓글