ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [스프링부트 개념과 활용] JPA 연동
    SPRING/스프링부트 개념과 활용 2021. 1. 11. 00:45

    ORM

    Object Relational Mapping의 약자. 

    객체와 릴레이션을  mapping 할 때 발생하는 개념적인 불일치를 해결하는 프레임워크.

     

    JPA

    Java Persistence API의 약자.

    여러가지 ORM 해결책들 중에서 자바에 대한 표준을 정한 것을 말한다. 

     

    예제 

     

    Pom.xml 의존성 추가 

    <dependency>
      	<groupId>org.springframework.boot</groupId>
      	<artifactId>spring-boot-starter-data-jdbc</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>com.h2database</groupId>
      <artifactId>h2</artifactId>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <scope>runtime</scope>
    </dependency>

    Entity 구현

    package com.springstudy.jpa.account;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import java.util.Objects;
    
    @Entity
    public class Account {
        // Id : PRIMARY KEY
        // GeneratedValue : 자동증가값
        @Id @GeneratedValue
        private Long id;
    
        private String username;
    
        private String password;
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Account account = (Account) o;
            return Objects.equals(id, account.id) &&
                    Objects.equals(username, account.username) &&
                    Objects.equals(password, account.password);
        }
    
        @Override
        public int hashCode() {
            return Objects.hash(id, username, password);
        }
    
    
    
    }
    

    Getter, Setter 외에 equals와 hashCode도 생성하는 것이 좋다.

    package com.springstudy.jpa.account;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    
    public interface AccountRepository extends JpaRepository<Account, Long> {
    	// Username을 조건으로  Select하는 method
        Account findByUsername(String username);
    }
    

    JpaRepository를 extends하여 Respository interface를 생성한다.

    (JpaRepository 상속시 @Repository 를 추가할 필요 없음)

    JpaRespository<'entityType', 'id Type'>

    또한 findByUsername과 같이 규칙에 맞는 메서드를 추가할 수 있다.

     

    Application.properties

    spring.datasource.hikari.maximum-pool-size=8
    spring.jpa.hibernate.ddl-auto=update
    spring.datasource.url=jdbc:mysql://localhost:3306/prj_m
    spring.datasource.username=root
    spring.datasource.password=
    

    TestCASE

    위 테스트케이스와 같이 슬라이스 테스트를 하려면 인메모리 데이터 베이스를 사용해야한다.

    해당 케이스에서는 H2를 사용하였다.

     

    로그를 보면 테이블 생성,  Insert, Select 등의 쿼리가 실행되는 것을 알 수 있다.

     

    Runner를 이용한 JPA 로직 실행 (MYSQL)

     

     

Designed by Tistory.