JAN's History
스프링과 JPA, MySQL를 이용한 CRUD 본문
1. MySQL 데이터베이스 및 테스트 테이블 생성
- 새로운 테이터베이스 생성 이름 : jpa_playground
- MOVIE 테이블 생성
CREATE TABLE `jpa_playground`.`movie` (
`MOVIE_ID` INT NOT NULL,
`NAME` VARCHAR(45) NULL,
PRIMARY KEY (`MOVIE_ID`)
);
2. IntelliJ에서 maven프로젝트 생성
3. 의존 설정
1. Hibernate EntityManager Relocation
2. MySQL Connector/J 검색
pom.xml에 복사 + 붙여넣기
4. META-INF 폴더 생성 및 persistence.xml 생성
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="playground" transaction-type="RESOURCE_LOCAL">
<description>
Persistence unit for the JPA tutorial of the Hibernate Getting Started Guide
</description>
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpa_playground?serverTimezone=UTC" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="1234" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect " />
<property name="hibernate.show_sql" value="true" />
<!--<property name="hibernate.hbm2ddl.auto" value="create" /> -->
</properties>
</persistence-unit>
</persistence>
<persistence-unit name="playground" transaction-type="RESOURCE_LOCAL">
playground 부분 인텔리제이 파일명을 입력해주세요.
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpa_playground?serverTimezone=UTC" />
MySQL에 jpa_playground 스키마 생성한 후, 스키마 이름을 적어주세요.
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="1234" />에 userId, password를 입력해주세요.
예제작성
1. Movie class 작성
@Entity // JPA를 이용해 테이터베이스의 엔티티에 매핑
@Table(name="MOVIE")
public class Movie {
@Id
@Column(name="ID")
private Long id;
@Column(name="NAME")
private String movieName;
+ getter setter 생성!
2.Main class 작성
public static void Main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory(" playground ");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
try {
tx.begin();
Movie movie = new Movie();
movie.setMovieId(1L);
movie.setMovieName("타이타닉");
em.persist(movie);
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
}
emf.close();
}
트랜잭션(Transcation, tx)의 중요성
- JPA의 수행 로직은 반드시 트랜잭션 내에서 수행되어야한다.
- 트랜잭션 밖에서 수행할 경우 에러가 발생한다.
- tx.begin(): 트랜잭션을 시작합니다.
- tx.commit(): 트랜잭션을 커밋하여 변경사항을 영구적으로 적용합니다. (데이터베이스에 반영)
- tx.rollback(): 트랜잭션 롤백은 트랜잭션 중에 발생한 변경 사항을 취소하고 이전 상태로 되돌리는 작업을 의미합니다. 보통 예외가 발생했거나 트랜잭션 실행 중에 문제가 발생했을 때 사용됩니다.
- + em은 JPA(Java Persistence API)의 EntityManager 객체를 나타냅니다.
* 주의 : persist 메소드는 엔티티를 영속성 컨텍스트라는 곳에 저장하는 것이지 엔티티의 내용을 DB에 저장하는 것은 아니다.
저장은 트랜잭션이 종료되는 시점에 DB에 전달할 모든 SQL을 모아서 한번에 처리하여 효율성을 높인다.
기본 CRUD JPA 문법
- 등록 : em.persist(movie);
- 조회 : Movie movie = em.find(Movie.class, 1L);
- 수정 : Movie movie = em.find(Movie.class, 1L);
- member.setMovieName("돈룩업");
- 삭제 : em.remove(movie);
'스프링' 카테고리의 다른 글
스프링과 JPA를 이용한 웹개발_연관관계 (1) | 2024.03.18 |
---|---|
스프링과 JPA를 이용한 웹개발_JPA 기초지식 (1) | 2024.03.17 |
스프링과 JPA를 이용한 웹개발_1 (0) | 2024.03.15 |
9주차 빈스코프 (0) | 2023.06.26 |
8주차_스프링 (0) | 2023.06.19 |