[JPA] 2.JPA ์์ํ๊ธฐ
1. Hello JPA - ํ๋ก์ ํธ ์์ฑ
ํด๋น ๊ฐ์์์๋ Maven๊ณผ H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ
์๋ฐ 8 ์ด์(8 ๊ถ์ฅ)
๋ฉ์ด๋ธ ์ค์ groupId:jpa-basic artifactId: ex1-hello-jpa version: 1.0.0 |
dependencies - pom.xml
<?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>ex1-hello-jpa</artifactId>
<version>1.0.0</version>
<dependencies>
<!-- JPA ํ์ด๋ฒ๋ค์ดํธ -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.3.10.Final</version>
</dependency>
<!-- H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.199</version>
</dependency>
</dependencies>
</project>
- hibernate : ํ์ด๋ฒ๋ค์ดํธ ์ฝ์ด
JPA ์ค์ - persistence.xml
JPA ์ค์ ํ์ผ
/META-INF/persistence.xml ์์น persistence-unit name์ผ๋ก ์ด๋ฆ ์ง์ avax.persistence๋ก ์์: JPA ํ์ค ์์ฑ hibernate๋ก ์์: ํ์ด๋ฒ๋ค์ดํธ ์ ์ฉ ์์ฑ |
<?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="org.h2.Driver"/>
<property name="javax.persistence.jdbc.user" value="sa"/>
<property name="javax.persistence.jdbc.password" value=""/>
<property name="javax.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"/>
<!--<property name="hibernate.hbm2ddl.auto" value="create" />-->
</properties>
</persistence-unit>
</persistence>
** javax ์์ : hibernate ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ง๊ณ ๋ค๋ฅธ JPA ๊ตฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์จ๋ ๋ฐ๊ฟ ์ ์์ (ํ์ค ์งํค๋ ๊ฒ)
** hibernate ์์ : hibernate ์ ์ฉ ์ต์
** ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฉ์ธ
- JPA๋ ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ข
์ X - ๊ฐ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ ๊ณตํ๋ SQL ๋ฌธ๋ฒ๊ณผ ํจ์๋ ์กฐ๊ธ์ฉ ๋ค๋ฆ > ๊ฐ๋ณ ๋ฌธ์ : MySQL์ VARCHAR, Oracle์ VARCHAR2 > ๋ฌธ์์ด์ ์๋ฅด๋ ํจ์ : SQL ํ์ค์ SUBSTRING(), Oracle์ SUBSTR() > ํ์ด์ง : MySQL์ LIMIT, Oracle์ ROWNUM - ๋ฐฉ์ธ : SQL ํ์ค์ ์งํค์ง ์๋ ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง์ ๊ณ ์ ํ ๊ธฐ๋ฅ |
hibernate.dialect ์์ฑ์ ์ง์
> H2 : org.hibernate.dialect.H2Dialect > Oracle 10g : org.hibernate.dialect.Oracle10gDialect > MySQL : org.hibernate.dialect.MySQL5InnoDBDialect ํ์ด๋ฒ๋ค์ดํธ๋ 40๊ฐ์ง ์ด์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฉ์ธ ์ง์ |
2. Hello JPA - ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ
JPA ๊ตฌ๋ ๋ฐฉ์
- ํ์ํ ๋๋ง๋ค EntityManager ์ฐ์ด๋
JpaMain.class
ใดjava.hellojpa์๋
public class JpaMain {
public static void main(String[] args){
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello")
EntityManager em = emf.createEntityManager();
// code
em.close();
emf.close();
}
}
๊ฐ์ฒด์ ํ ์ด๋ธ์ ์์ฑํ๊ณ ๋งตํํ๊ธฐ
- @Entity : JPA๊ฐ ๊ด๋ฆฌํ ๊ฐ์ฒด
- @Id : ๋ฐ์ดํฐ๋ฒ ์ด์ค PK์ ๋งตํ
@Entity
public class Member {
@Id
private Long id;
private String name;
//Getter, Setter ...
}
create table Member (
id bigint not null,
name varchar(255),
primary key(id)
);
์ค์ต - ํ์์ ์ฅ
- ํ์๋ฑ๋ก
- ํ์์์
- ํ์์ญ์
- ํ์ ๋จ ๊ฑด ์กฐํ
[๋ฑ๋ก]
JpaMain
public class JpaMain {
public static void main(String[] args){
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello")
EntityManager em = emf.createEntityManager();
// connection ๋ฐ๋ ๊ฒ์ฒ๋ผ transaction ์ด ์ค์
Entitytransaction tx = em.getTransaction();
tx.begin();
try{
Member member = new Member();
member.setId(1L);
member.setName("helloA");
em.persist(member);
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
}
emf.close();
}
}
Hibernate ์ฃผ์
Hibernate: /* insert hellojpa.Member */ insert into Member (name, id) values (?,?) |
-> persistence.xml์ ๋ฃ์ ์ฃผ์ ์ต์ ๋๋ฌธ!
**@Table, @Column
@Table(name = "USER")์ด๋ผ๊ณ ํ๋ฉด userํ ์ด๋ธ๋ก ๋ค์ด๊ฐ [public class Member ์์]
@Column(name = "username")์ด๋ผ๊ณ ํ๋ฉด username ์นผ๋ผ์ ๋ค์ด๊ฐ [private String name ์์]
[์์ ]
public class JpaMain {
public static void main(String[] args){
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello")
EntityManager em = emf.createEntityManager();
// connection ๋ฐ๋ ๊ฒ์ฒ๋ผ transaction ์ด ์ค์
Entitytransaction tx = em.getTransaction();
tx.begin();
try{
Member findmember = em.find(Member.class, 1L);
findmember.setName("HelloJ");
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
}
emf.close();
}
}
- JPA ํตํด์ entity๊ฐ์ ธ์ค๋ฉด JPA๊ฐ ๊ด๋ฆฌํ๊ณ ๋ณ๊ฒฝ์ด ๋์๋์ง ์ฌ๋ถ๋ฅผ transaction commitํ๋ ์์ ์ ์ฒดํฌํด์ ์๋์ผ๋ก update ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฆผ
์ฃผ์)
- emf๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋น์ค๋ฅผ ํ๋ค๋ฉด ์น์๋ฒ๊ฐ ์ฌ๋ผ์ค๋ ์์ ์ db๋น ํ๋๋ง ์์ฑ
- em๋ ๊ณ ๊ฐ ์์ฒญ ์ฌ๋๋ง๋ค ์ฌ์ฉํ๊ณ ๋ฒ๋ฆผ
- em์ thread ๊ฐ ๊ณต์ ํ๋ฉด ์๋จ! (์ฌ์ฉํ๊ณ ๋ฒ๋ ค์ผํจ) -> db connection ์ฐ๊ณ ๋๋ ค์ฃผ๋ ๊ฒ์ฒ๋ผ
- JPA์ ๋ชจ๋ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ํธ๋์ญ์ ์์์ ์คํ
3. JPQL ์๊ฐ
- ๊ฐ์ฅ ๋จ์ํ ์กฐํ ๋ฐฉ๋ฒ -> em.find(), ๊ฐ์ฒด ๊ทธ๋ํ ํ์( a.getB().getC() )
- ๋์ด๊ฐ 18์ด ์ด์์ธ ํ์์ ๋ชจ๋ ๊ฒ์ํ๊ณ ์ถ๋ค๋ฉด?
๋ฌธ์ ) ๊ฒ์ ์ฟผ๋ฆฌ
- ๊ฒ์์ ํ ๋๋ ํ ์ด๋ธ์ด ์๋ ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ๋์์ผ๋ก ๊ฒ์
- ๋ชจ๋ DB ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด๋ก ๋ณํํด์ ๊ฒ์ํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅ
- ์ ํ๋ฆฌ์ผ์ด์ ์ด ํ์ํ ๋ฐ์ดํฐ๋ง DB์์ ๋ถ๋ฌ์ค๋ ค๋ฉด ๊ฒฐ๊ตญ ๊ฒ์ ์กฐ๊ฑด์ด ํฌํจ๋ SQL์ด ํ์
- ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ์ค์ฌ์ผ๋ก ๊ฐ๋ฐ
->List<Member> result =
em.createQuery("select m from Member as m where m.name = ", Member.class).getResultList();
+ getResult ์ ์ .setFirstresult(5), .setMaxResults(8) = rownum ์์๊ฐ ๊ฐ๋ฅ
- SQL ์ถ์ํํ JPQL์ด๋ผ๋ ๊ฐ์ฒด ์งํฅ ์ฟผ๋ฆฌ ์ธ์ด ์ ๊ณต
- SQL๊ณผ ๋ฌธ๋ฒ ์ ์ฌ, SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN ์ง์
- ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ๋์์ผ๋ก ์ฟผ๋ฆฌ
- SQL์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๋์์ผ๋ก ์ฟผ๋ฆฌ
- SQL์ ์ถ์ํํด์ ํน์ DB SQL์ ์์กด X
- ๊ฐ์ฒด ์งํฅ SQL
'๐จโ๐ป Web Development > JPA - ๊ธฐ๋ณธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JPA] 4.์ํฐํฐ ๋งตํ (0) | 2023.03.10 |
---|---|
[JPA] 3.์์์ฑ ๊ด๋ฆฌ - ๋ด๋ถ ๋์ ๋ฐฉ์ (0) | 2023.03.09 |
[JPA] 1.JPA ์๊ฐ (0) | 2023.03.08 |
์ต๊ทผ๋๊ธ