JPA를 사용해서 객체지향적으로 데이터베이스를 사용하자

박경현·2023년 3월 31일
0

오늘 강의 내용 중 가장 핵심이었던 문장이 하나 있었다

객체지향적으로 프로그래밍 한다는 것은 무엇일까?

이걸 제대로 고민하지 않고 지금까지 DB와 연관지으려고 했던거 같다

User user = new User();
user.setName("kim");
user.setAge(22);

// 그 후 영속성 저장소(계속 저장가능)에 저장
UserManager.save(user);
UserManager.find("kim");

SQL은 DB마다 다르고 이걸 굳이 알지 않아도 객체를 만들어서 저장할 수는 없을까?

JPA의 등장 -> ORM 표준 API

차고로 JPA는 인터페이스이다 -> 즉 선언만 하므로 실제 구현체가 있어야한다!

이때 구현체는 Hibernate가 가장 인기가 많고 스프링에서도 이걸로 자동 지정된다

차고로 JPA는 스프링에서 만든게 아니다 => 그래서 Spring에서 Spring Data JPA를 만듬!

Spring Data JPA - 다양한 데이터베이스들의 CRUD를 일관되게 쓰게 해줌!

그래서 MongoDB, MySQL, Oracle, Redis 등 다양한 데이터베이스를 쉽게 사용할 수 있다.

EntityManager & EntityManagerFactory & Entity

EntityFactory가 EntityManager를 생성한다
그리고 EntityManager가 영속성 컨텍스트에 접근하여 엔티티에 대한 DB작업을 제공한다

Entity로 테이블 생성해보기!

DB의 테이블에 대응되는 클래스!!
여기에는 칼럼명과 비슷한 이름의 필드들이 있어야한다!

@Entity
@Table(name="jpa_user")
@Setter
@Getter
@ToString
@NoArgsConstructor
public class JpaUser {
	@Id
    @Column(name="user_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer userId;
    
    @Column(length = 255)
    private String email;
    @Column(length = 50)
    private String name;
    @Column(length = 50)
    private String password;
    
    @CreationTimestamp // 현재시간이 저장될때 자동으로 생성!
    private LocalDateTime regTime;
}

Entity를 만들었으면 데이터 삽입 및 삭제, 조회 해보자!

main이 있는 클래스에서 조작을 해볼 예정이어서 CommandLineRunner 인터페이스를 사용할 것이다!

@SpringBootApplication
public class SpringDataJpaApplication implements CommandLineRunner {
	
    @Autowired
    EntityManagerFactory entityManagerFactory;
    
    @Override
    public void run(String ...args) throws Exception {
    	EntityManager entityManager = entityManagerFactory.createEntityManager();
        
        EntityTransaction transaction = entityManager.getTransaction();
        try{
        	transaction.begin();
            
            JpaUser jpaUser = new JpaUser();
            jpaUser.setName("kim");
            jpaUser.setEmail("11111");
			jpaUser.setPassword("1234");
            
            entityManager.persist(jpaUser);
            transaction.commit();
        
        
        }catch (Exception e) {
        	transaction.rollback();
        } finally {
        	entityManager.close();
        }
    }

}

짧은 정리

EntityManager가 JPA의 핵심이라는 것!
그리고 EntityManagerFactory를 통해 EntityManager가 생성된다는 것!

EntityManager는 결국 영속성 컨텍스트에 접근하여 엔티티에 대한 데이터베이스 작업을 제공하기 위해 사용된다!

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글