피할 수 없다면 즐기자! 스프링부트 너.. 뭐 돼?
Java Persistence Query Language
아래의 url에 접속하여 자신의 환경 세팅대로 선택한 후 "spring Data JPA" 과 "Oracle Driver", "Lombok" dependencies를 추가해주세요. 다 세팅 후 하단의 generate를 클릭하여 다운받아주세요.
프로젝트 import 이후에 과정 다음 블로그 참고.
https://velog.io/@luvjoyyy/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-%EB%84%88-%EB%AD%90-%EB%8F%BC1-SPRING-BOOT
[src/main/resources]에 [META-INF] 폴더를 생성 후 [persistence.xml] 파일을 생성해줘요.
해당 파일에 속성을 입력해주세요.
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
<persistence-unit name="hello">
<properties>
<!-- 필수 속성 -->
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="javax.persistence.jdbc.user" value="springjpa" />
<property name="javax.persistence.jdbc.password" value="springjpa" />
<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:xe" />
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
<!-- <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL10Dialect" /> -->
<!--
실제 서버 배포시에는 없애주는게 좋다. 실습 때 다양한 테이블 생성을 위한 것
코드 작성에 따라 자동으로 테이블 삭제와 생성을 담당한다.
-->
<property name="hibernate.hbm2ddl.auto" value="create" />
<!-- 옵션 -->
<!-- 콘솔에 하이버네이트가 실행하는 SQL문 출력 -->
<property name="hibernate.show_sql" value="true" />
<!-- SQL 출력 시 보기 쉽게 정렬 -->
<property name="hibernate.format_sql" value="true" />
<!-- 쿼리 출력 시 주석(comments)도 함께 출력 -->
<property name="hibernate.use_sql_comments" value="true" />
</properties>
</persistence-unit>
</persistence>
EntityManager.persist(entity);
Member member = new Member();
member.setId("userA");
member.setName("회원1");
em.persist(member);
em.detach(member);
em.remove(member);
Member member = new Member();
member.setId("member1");
member.setName("회원1");
em.persist(member);
// 조회
Member findMember = em.find(Member.class, "member1");
Member member = new Member();
member.setId("member1");
member.setName("회원1");
em.persist(member);
// 조회
Member findMember = em.find(Member.class, "member1");
Member findMember2 = em.find(Member.class, "member2");
Member a = em.find(Member.class, "member1");
Member b = em.find(Member.class, "member1");
tx.begin(); // 트랜잭션 시작
em.persist(memberA);
em.persist(memberB);
// 여기까지는 insert sql을 데이터베이스에 보내지 않는다.
// 커밋하는 순간 데이터베이스에 insert sql을 보낸다.
tx.commit(); // 트랜잭션 커밋
tx.begin(); // 트랜젝션 시작
// 영속 엔티티 조회
Member memberA = em.find(Member.class, "memberA");
memberA.setUsername("hello");
memberA.setAge(10);
// em.update(member) => 존재하지않음.
tx.commit(); // 커밋
// 삭제 대상 엔티티 조회
Member memberA = em.find(Member.class, "memberA");
em.remove(memberA); // 엔티티 삭제
em.datach(entity) : 특정 엔티티만 준영속 상태로 전환
em.clear() : 영속성 컨텍스트를 완전히 초기화
em.close() : 영속성 컨텍스트를 종료
제약조건 : 회원 이름 필수, 길이는 10자
출처
https://media.giphy.com/media/kyUIknbbDNvID5XzU4/giphy.gif
https://media.giphy.com/media/A6aHBCFqlE0Rq/giphy.gif