새소식

Springboot

[Spring] JPA란? JPA 예제 코드 작성해보기

  • -

JPA(Java persistence API)란

💡현재 자바 진영의 ORM 기술 표준, 인터페이스 모음

쉽게 표현하자면 자바의 ORM기술을 쉽게 구현하도록 도와주는  API입니다.

 

여기서 ORM은 뭘까

ORM(Object-Relation Mapping)

💡객체가 DB 테이블이 되도록 매핑 시켜주는 프레임워크

  • 프로그램의 복잡도를 줄이고, 가바 객체와 쿼리를 분리할 수 있습니다
  • 트랜잭션 처리나 기타 데이터 베이스 관련 작업들을 편리하게 할 수 있습니다

node.js의 sequelize 도 ORM 의 한 종류입니다

한눈에 이해할 수 있도록 표로 정리해 보았습니다

 

SQL Mapper ORM Mapper
자바 클래스와 sql을 매핑 자바 클래스와 DB 테이블을 매핑
SQL을 명시하여 직접 DB 조작 객체 간의 관계를 바탕으로 SQL 자동 생성
myBatis,jdbc Template JPA,Hibernate

 


JPA의 동작과정

JPA는 애플리케이션과 JDBC 사이에서 동작합니다

개발자가 JPA를 사용하면 JPA내부에서 JDBC API를 사용하여 SQL을 호출하고 DB와 통신을 하는 방식으루 이루어 집니다

'

JPA의 장단점

장점 단점
SQL 중심적인 개발보다 객체 중심적인 개발이 가능 합니다 대용령 데이터 기반 환경에서 튜닝이 어렵습니다
DDL문을 자동 생성해주기 때문에 생산성이 증가합니다 업무 비지니스가 복잡할 경우 JPA로 처리하기 어렵습니다
유지보수가 쉽습니다  

 


그럼 이제 예제 코드로 JPA를 어떻게 사용하는 지 알아보겠습니다

먼저 순서는 엔티티 정의-레포지토리정의-서비스 정의-컨트롤러 정의 순으로 이루어집니다

 

1. 엔티티 클래스 정의

데이터베이스 테이블과 매핑될 엔티티 클래스를 정의합니다

엔티티 클래스는 @Entity 어노테이션을 이용하여 정의합니다

엔티티에는 setter가 없는 것이 좋습니다

@Entity  //엔티티 클래스 임을 선언
@Table(name="users") // 엔티티 클래스와 매핑될 데이터 베이스 테이블 이름 지정
public class User{
	
    @Id //primary key임을 선언
    @GeneratedValue(strategy=GenerationType.IDENTITY) //엔티티ㅡ이 식별자 값을 자동으로 생성
    private Long id;
    
    //해당 엔티티 클래스의 필드가 데이터베이스의 컬럼으로 매핑될 때 컬럼의 제역 조건을 설정
    @Column(nullable=false)
    private String name;
    
    @Column(nullable=false)
    private String email;
    
    @Column(nullable=false)
    private String password;
 
 }

 

2. Repository 인터페이스 정의

엔티티를 조작하기 위한 Repository 인터페이스를 정의합니다

JPARepository인터페이스를 상속 받아 사용합니다

 

JpaRepository인터페이스

💡스프링 데이터 JPA에서 제공하는 CRUD 메서드를 상속받아 사용할 수 있는 인터페이스 입니다

@Repository
public interface UserRepository extends JpaRepository<User,Long>{

}

 

3. 서비스 클래스 정의

엔티티를 사용하는 비지니스 로직을 구현하는 서비스 클래스를 정의합니다

이때 repository인터페이스를 주입받아 사용합니다

 

예시로는 유저를 생성하는 api를 만들어봤습니다

@Service
public class UserService{
	
    	@Autowired
        private UserRepository userRepository;
        
        public User createUser(User user){
        	return userRepository.save(user);
        }
        
}

 

4. 컨트롤러 클래스 정의

HTTP 요청을 처리하는 컨트롤러 클래스를 정의합니다

@RestController
@RequestMapping("/users")
public class UserController{
	
	@Autowired
    private UserService userService;
    
    @PostMapping
    public User createUser(@RequestBody User user){
    		return userService.createUser(user);
    }
}
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.