Spring/Spring boot

JPA 로 데이터 액세스

원2 2022. 8. 17. 11:55
728x90
반응형

Spring Data JPA 를 사용하여 관계형 데이터베이스에 데이터를 저장하고 검색하는 애플리케이션을 구축해보자

 

종속성

Spring Data JPA

H2 Database

 

Entity 생성

package com.example.accessingdatajpa;

import lombok.Data;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

// @Table 주석이 없으므로 이 Entity 는 Customer 이라는 테이블에 매핑된다고 가정
@Entity
@Data
public class Customer {

    // 객체의 아이디로 인식할 수 있도록 @Id 어노테이션
    // ID 가 자동으로 생성되어야함을 나타내는 @GeneratedValue
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    // 아래의 두 객체의 어노테이션이 없는 이유
    // 객체 자체와 동일한 이름을 고유하는 열에 매핑된다고 가정
    private String firstName;
    private String lastName;

    // default 생성자, 직접 사용하지 않으므로 protected 로 지정
    protected Customer() {}

    // 실제 사용하는 생성자
    // Customer db에 저장할 인스턴스를 만드는데 사용
    public Customer(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    // 하나의 출력방식을 정해서 리턴
    @Override
    public String toString() {
        return String.format(
                "Customer[id=%d, firstName='%s', lastName='%s']",
                id, firstName, lastName
        );
    }
}

 

간단한 쿼리 생성

package com.example.accessingdatajpa;

import org.springframework.data.repository.CrudRepository;

import java.util.List;

// CustomerRepository 확장
// Customer 과 함께 작동하는 엔티티 유형 및 ID 는 Long 매개변수에 저장
// CrudRepository 에 엔티티를 저장, 삭제, 찾는 방법을 포함하여 상속
public interface CustomerRepository extends CrudRepository<Customer, Long> {
    // 메서드를 선언하여 다른 쿼리 메서드를 정의
    List<Customer> findByLastName(String lastName);
    
    Customer findById(long id);
}

ㅣ이렇게 있으면 저장소 인터페이스의 구현을 따로 작성할 필요가 없다

Spring Data JPA 가 알아서 해주기때문

 

Application Class 

실제 테이블을 생성하지 않아서 log 로 출력을 얻어보자

 

package com.example.accessingdatajpa;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class AccessingDataJpaApplication {

    private static final Logger log = LoggerFactory.getLogger(AccessingDataJpaApplication.class);

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

    @Bean
    public CommandLineRunner demo(CustomerRepository repository) {
        return (args) -> {
            // CustomerEntity 의 Customer() 생성자를 필요로 하며 해당 생성자를 사용
            // 데이터 저장
            repository.save(new Customer("Jack", "Sparrow"));
            repository.save(new Customer("Hector", "Barbossa"));
            repository.save(new Customer("Black", "Pearl"));
            repository.save(new Customer("Flying", "Dutchman"));

            // 모든 데이터 출력
            log.info("Customers found with findAll():");
            log.info("--------------------------------");
            for (Customer customer : repository.findAll()) {
                log.info(customer.toString());
            }
            log.info("");

            // 해당 ID 와 일치하는 데이터 출력
            Customer customer = repository.findById(2L);
            log.info("Customer found with findById(2L):");
            log.info("----------------------------------");
            log.info(customer.toString());
            log.info("");

            // lastName 이 일치하는 데이터 출력
            log.info("Customer found with findByLastName('Sparrow'):");
            log.info("-----------------------------------------------");
            repository.findByLastName("Sparrow").forEach(sparrow -> {
                log.info(sparrow.toString());
            });

//            for (Customer sparrow : repository.findByLastName("Sparrow")) {
//                log.info(sparrow.toString());
//            }
            log.info("");
        };
    }
}

 

결과

: Customers found with findAll():
: --------------------------------
: Customer[id=1, firstName='Jack', lastName='Sparrow']
: Customer[id=2, firstName='Hector', lastName='Barbossa']
: Customer[id=3, firstName='Black', lastName='Pearl']
: Customer[id=4, firstName='Flying', lastName='Dutchman']
: 
: Customer found with findById(2L):
: ----------------------------------
: Customer[id=2, firstName='Hector', lastName='Barbossa']
: 
: Customer found with findByLastName('Sparrow'):
: -----------------------------------------------
: Customer[id=1, firstName='Jack', lastName='Sparrow']
:

 

728x90
반응형

'Spring > Spring boot' 카테고리의 다른 글

시간 측정하는 간단한 aop  (0) 2022.12.22
mariadb로 데이터 액세스  (0) 2022.08.16
Restful 웹 서비스 구축  (0) 2022.08.16
스프링부트 개념정리 2  (0) 2022.07.27
스프링부트 개념정리  (0) 2022.07.26