JPA

JPA 공부 - Day 1 (기본편)

littlemk 2022. 1. 8. 12:25

jdbc는 실제 쿼리를 사용
mybatis, jdbc template 도 비슷

JPA의 경우 개발향상성 향상, 속도, 유지보수에 좋음

JPA가 실무에서 어려운 이유
1. 객체와 테이블을 올바르게 설계하지 못해서
2. JPA내부 동작 방식 이해하지 못해서

* SQL 중심적인 개발의 경우 객체모델링할수록 매핑작업이 늘어난다..


jpa 지연로딩/즉시로딩
- 지연로딩: 객체가 실제 사용될 때 로딩
- 즉시로딩: Join sql로 한번에 연관된 객체까지 미리 조회
=> 지연,즉시로딩을 on/off 할 수 있다.

 

 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>
            <!-- H2 필수 속성 -->
            <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"/>

            <!-- MS-SQL 필수 속성 -->
            <!--<property name="javax.persistence.jdbc.driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
            <property name="javax.persistence.jdbc.user" value="sa"/>
            <property name="javax.persistence.jdbc.password" value="study"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:sqlserver://192.168.111.222:1433;databaseName=study"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>-->

            <!-- Oracle 필수 속성 -->
            <!--<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
            <property name="javax.persistence.jdbc.user" value="study"/>
            <property name="javax.persistence.jdbc.password" value="study"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@192.168.111.222:1521:orcl"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>-->

            <!-- Tibero 필수 속성 -->
            <!--<property name="javax.persistence.jdbc.driver" value="com.tmax.tibero.jdbc.TbDriver"/>
            <property name="javax.persistence.jdbc.user" value="study"/>
            <property name="javax.persistence.jdbc.password" value="study"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:tibero:this:@192.168.111.222:8629:tibero"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>-->

            <!-- PostgreSQL 필수 속성 -->
            <!--<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
            <property name="javax.persistence.jdbc.user" value="postgres"/>
            <property name="javax.persistence.jdbc.password" value="study"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://192.168.111.222:5432/postgres"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL95Dialect"/>-->

            <!-- 옵션 -->
            <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.jdbc.batch_size" value="10"/>
            <property name="hibernate.hbm2ddl.auto" value="update" />
        </properties>
    </persistence-unit>
</persistence>