프로젝트 생성

데이터베이스 - h2

http://www.h2database.com/

h2/bin/h2.sh

  • 최고의 실습용 DB
  • 가볍다.
  • 웹용 쿼리툴 제공
  • MySQL, Oracle 데이터베이스 시뮬레이션 기능
  • 시퀀스, AUTO INCREMENT 기능 지원

Maven 소개

https://maven.apache.org/

요즘에는 Gradle을 사용하는 추세로 나아가지만,
아직까지는 메이븐을 많이 사용하기 때문에 Maven 사용

pom.xml

의존성 추가

이것도 추가해야한다.

META-INF/persistence.xml

Dialect

JPA는 특정 데이터베이스에 종속적이지 않음
각각의 데이터베이스가 제공하는 SQL 문법과 함수는 조금씩 다름

  • 가변문자: MySQL은 varchar, Oracle은 varchar2
  • 문자열을 자르는 함수: MySQl은 SubString(), Oracle은 Substr()
  • 페이징: MySQL은 Limit, Oracle은 Rownum

h2면 H2Dialet,
MySQl이면, MySQL5InnoDBDialect
오라클이면, Oracle10gDialect
등등 하이버네이트는 40가지 이상의 데이터베이스 방언 지원

어플리케이션 개발

JPA 구동 방식

Member

JpaMain

엔티티 매니저를 가져오고 트렌젝션을 실행한 뒤, 멤버를 새로 저장하고 트렌젝션 커밋을 하면 멤버가 저장된다.

옵션

hibernate.show_sql : SQL 쿼리를 보여준다.
hibernate.format_sql: 이쁘게 포맷을 해서 보여준다.
hibernate.use_sql_comments: /* */ 주석을 이용해 왜 이렇게 나왔는지 보여줌.

추가로

@Table : 테이블 이름 설정할 수 있다.
@Column: 컬럼 이름 설정할 수 있다.

이렇게 try-catch문으로 데이터 저장을 실패했을시, 또는 커밋을 실패햇을 시, 데이터를 롤백하도록 만들어야 한다.

그런데 스프링은 위 과정을 알아서 다 해줌.

em.find()

SQL에서 select from where를 이용해 멤버를 찾는것을 확인할 수 있다.

Update

set을 통해 내용을 바꾸면, update 쿼리를 날린것을 볼 수 있다.

JPQL 소개

  • 좀 더 자세한 조건으로 검색하고 싶다.(where을 직접 쓰고 싶다.)
    등등

주석에 JPQL이 그대로 들어가있고, 멤버 객체 엔티티를 사용하는 것을 확인할 수 있다.

JPQL의 장점

페이징을 해보자.

SQL문이 이와 같이 나온 것을 확인할 수 있다.
정말 좋은점은 여기서 데이터베이스를 오라클로 바꾸기만 하면,

이렇게 오라클 문장으로 바꿔준다. 이걸 보니 JPQL을 배워야 한다는 것을 알게 되었다.

안 쓸 수가 없다.
이와 같이 데이터베이스에 데이터를 검색하고, 조건을 좀 더 디테일하게 사용하기 위해 JPQL을 사용한다.

  • JPQL은 엔티티 객체를 대상으로 쿼리
  • SQL은 데이터베이스 테이블을 대상으로 쿼리

0개의 댓글

Powered by GraphCDN, the GraphQL CDN