오늘 강의 내용 중 가장 핵심이었던 문장이 하나 있었다
객체지향적으로 프로그래밍 한다는 것은 무엇일까?
이걸 제대로 고민하지 않고 지금까지 DB와 연관지으려고 했던거 같다
User user = new User();
user.setName("kim");
user.setAge(22);
// 그 후 영속성 저장소(계속 저장가능)에 저장
UserManager.save(user);
UserManager.find("kim");
SQL은 DB마다 다르고 이걸 굳이 알지 않아도 객체를 만들어서 저장할 수는 없을까?
차고로 JPA는 인터페이스이다 -> 즉 선언만 하므로 실제 구현체가 있어야한다!
이때 구현체는 Hibernate가 가장 인기가 많고 스프링에서도 이걸로 자동 지정된다
차고로 JPA는 스프링에서 만든게 아니다 => 그래서 Spring에서 Spring Data JPA를 만듬!
그래서 MongoDB, MySQL, Oracle, Redis 등 다양한 데이터베이스를 쉽게 사용할 수 있다.
EntityFactory가 EntityManager를 생성한다
그리고 EntityManager가 영속성 컨텍스트에 접근하여 엔티티에 대한 DB작업을 제공한다
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;
}
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는 결국 영속성 컨텍스트에 접근하여 엔티티에 대한 데이터베이스 작업을 제공하기 위해 사용된다!