강의가 옛날거라 Maven 써서 좀 그렇다..
스프링 부트도 안쓴다..
근데..
저 groupId 할 때 - 썼더니 저게 패키지 src java 내부에 패키지로도 생성되고 거기에 메인 패키지가 생기는데
패키지이름으로 - 이거 쓰면 안되는 듯?
refactor -> rename 해주면 정상적으로 되긴 함.
아니면 아예 그 생성된 패키지 자체를 지워버리고,
새로 패키지 만들어서 거기 안에 main 클래스 만들고 main 메소드 넣어줘도 되긴 함.
보면 pom.xml이 생기는데
이게 build.gradle 역할
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>jpa-basic</groupId>
<artifactId>ex-hello-jpa</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
이렇게 되어 있음.
이제 종속성, 즉 라이브러리 추가해 줘야 함.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>jpa-basic</groupId>
<artifactId>ex-hello-jpa</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.3.10.Final</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.199</version>
</dependency>
</dependencies>
</project>
이렇게 종속성 추가 됨.
근데, 강의가 옛날거기도 하고, hibernate나 h2database 랑 연결하는 라이브러리 다 버전이 안맞을 수 있음.
이럴 때는,
https://spring.io/projects/spring-boot#learn
spring -> projects -> spring boot -> learn
가보면,
스프링 버전에 따란 참조 문서를 볼 수 있는데,
거기서 내가 쓸 스프링 버전에 맞춰서 지정.
뭐 솔직히 지금은 JPA만 써서 해볼거라 상관은 없음.
나중에 스프링 부트 써서 할 듯.
여튼 들어가서,
이렇게 분류를 잘 해놨음.
들어가서 org.hibernate 찾아보면 됨.
이 앞에 붙는 org
io도 있고 몇종류 있긴 함.
근데 지금은 hibernate 이름 바뀐 듯 살짝
현 스프링에 맞는 버전은 6.2.9.Final
그리고, 지금 보면 hibernate-entitymanager가 없다.
외부 찾아보니까.
https://central.sonatype.com/artifact/org.hibernate.orm/hibernate-core/6.1.4.Final
걍 core 넣으면 되는 듯?
6.2.9 maven hibernate 해서 쳐보면 나오긴 함.
거기도 core긴 함.
h2도 똑같이.
참고로 저 위 사진에서, 중간게 artifactId임.
그래서
이것도 똑같이 넣음.
아 근데, 저거는 내가 설치한 h2 버전에 맞게 설치하는 게 좋음.
마침 그것도 2.1.214임.
h2에서 버전아는 방법은 일단 h2 들어가서
select h2version() from dual;
이거 쿼리로 날려보면 됨.
<dependencies>
<dependency>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.2.9.Final</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.1.214</version>
</dependency>
</dependencies>
JPA 설정하기.
우리가 JPA를 사용하려면 설정을 해 줘야 한다.
이거 application.properties에 했던 내용들 인 듯.
먼저, 경로가 정해져 있음.
resources/META-INF/persistence.xml
여기다 해야 함.
persistence가 영구적으로 저장하다 그런 뜻이니 딱 JPA용 파일인듯?
<?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="jakarta.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="jakarta.persistence.jdbc.user" value="sa"/>
<property name="jakarta.persistence.jdbc.password" value="1234"/>
<property name="jakarta.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/./test"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>
</properties>
</persistence-unit>
</persistence>
maven이니 xml 형식이고, xml버전은 1.0이고, 언어 형식은 utf-8
persistence 이 부분이 이제 중요한 데,
persistence 버전은 2.2, 즉 JPA 2.2버전이라는 거임.
뭐 링크에서 가져오고, xsi는 어떤 그러니까 문서의 형식? 그런 걸 말하는 듯?
그 xsi 더 자세한 건 저기 저 persistence 저기 링크에서 가져오는 듯.
그 다음 persistence-unit 이름은 hello
그러니까 이게 무슨 뜻이냐면,
우리가 나중에 createEntityManager("hello")해서 EntityManager를 만들 때, 저 hello를 저기서 식별해서 저 옵션으로 만든다는 뜻임.
그냥 일단은 다르긴 한데, DataSource랑 비슷함.
DataSource는 DB와 연결에 더 중점을 두고,
저거는 JPA와 엔티티관리에 더 중점을 두긴한건데,
둘다 DB 관련 작업을 구성하는데 쓰긴 함....
근데 다르다는 건 꼭 알고 있으셈.
여튼, 그 다음 이제 구성에 대한 정보들 프로퍼티로 넣어주는데,
driver : 어떤 드라이버, 어떤 db인지,
user : DB유저이름
password : 비밀번호
url : DB의 url
hibernate.dialect : dialect 이거는 방언 이라는 뜻인데, 그러니까 왜 DB마다 조금씩 다른 sql문이라던가 그런 특징? 그런 게 있기 때문에 이게 어떤DB의 방언인지 넣어 줘야 함.
필요하면 커스텀도 가능함.
여기까지가 필수속성이고,
show_sql : 이거는 그냥 sql 로그로 찍어주는 뭐 그런 거 인듯.
format_sql : 이거는 위로인해 나오는 sql로그를 이쁘게 포맷팅 해서 보여줌
use_sql_comments : 이거는 저 sql로그가 어디서 실행되었는지 코멘트 달아주는 거임.
나머진 뒤에 가면서 설명 하실 듯.
참고로, hibernate 붙은 건 하이버네이트 전용옵션이고, 구현체를 하이버네이트 말고 다른 걸 쓰면 다른 걸로 바꿔야 하긴 하는데 지금은 뭐 거의 대부분 하이버네이트... 쓸 듯.
'JPA > JPA 기본' 카테고리의 다른 글
6. 영속성 컨텍스트 (0) | 2023.10.20 |
---|---|
5. 개발 (0) | 2023.10.19 |
3. JPA (0) | 2023.10.19 |
2. 객체지향과 관계형DB (0) | 2023.10.18 |
1. JPA (0) | 2023.10.18 |