• JPA 입문

    2017. 10. 16. 17:46

    by. 위지원

    JPA 프로그래밍 입문 -최범균 지음을 보고 공부한 내용


    예제 코드 : https://github.com/madvirus/jpa-start



    이책은 무려 올해 5월에 나온 딲끈딲끈한 책이다 유후 ~~ JPA에 대해 공부했지만 빠르게 다시 이 책을 통해 복습해보자


    이클립스내의 폴더




    -src/main/java         : 자바 소스 코드

    -src/main/resource  : JPA 설정 파일



    시작하기 위해



    이클립스 - spring legacy-mvc 로 프로젝트를 생성하고

    test폴더를 모두 없엤다(test/resource도) 서버는 톰캣 8.5를 사용했다.

    myslq table은 user email,name,createData로 이루어진 테이블을 생성했다.




    pom.xml에는 아래와 같이 추가해주었다 ( 예제 코드 링크에 저자님이 올려주심! )



    하이버 네이트는 jpa의 구현체이다. 하이버네이트-c3p0는 커넥션 풀이다 ( 커넥션 풀은 어플리케이션과 디비 연동을 효율적으로 하기 위해 사용한다)


    그리고 아래에 보면 컴파일 플러그인의 버전을 자바 버전과 맞춰준다.





    생성해놓은 User 테이블과 매칭될 수 있도록 유저 도메인을 하나 생성한다.




    @Id 어노테이션은 식별자를 뜻한다.

    어노테이션을 안써도 되는 경우는 디비 컬럼명이랑 변수명이랑 동일하면 안써도 된다. 굿 ^0^





    persistence.xml에는 아래와같이 작성한다.



    <9행> 로컬 트랜잭션은 자바 커넥션으로 트랜잭션 처리

    <10행> 방금 생성한 도메인 클래스 경로를 작성해준다.

    <11행> 을 true로 하면 <10행>의 <class>태그로 설정하지 않은 클래스는 관리대상에서 제외한다.

    <15-19행> db연결을 위해 설정해준다.

    <21행> 쿼리를 로그로 출력할지 설정

    <22행> 쿼리를 생성할 때 사용할  Dialect : 이에 맞게 하이버네이트가 db종류에 맞는 쿼리를 생성해주는 것!

    <24-27행> c3p0커넥션 풀 관련 설정





    영속컨테스트란 jpa가 관리하는 엔티티 객체 집합인데 이에 속한 엔티티 객체를 디비에 반영한다. 매핑정보를 이용한다.여기에 저장된 객체를 영속 객체라 한다.


    영속컨테스트는 인티티메니저 단위로 생긴다. 응용 프로그램은 영속 컨테스트에 직접 접근할 수 없으며, 엔티티 매니저를 통해 작업을 수행한다

    엔티티매니저는 쉽게 생각해서  JDBC프로그래밍할때 커넥션객체로 생각하면 된다.


    응용프로그램 동작 순서는 다음과 같다.


    1.엔티티 매니저 생성

    2.트랜잭션 시작

    3.엔티티 매니저를 통해 영속 컨텍스트에 객체를 추가,구함

    4.트랜잭션 커밋

    5.엔티티 매니저 close


    이제 실제로 사용하기 위해서 src/main/java/com/jpa/main 아래에 AdduserMain.java 클래스를 추가하였다.코드를 보면 위 순서대로 되고 있는것을 알 수 있다.




    <7행> "jpastart" 는 위 xml에서 persistenece unit name으로 정한 값으로 한다.

    <14-15행> 객체에 값을 넣고 생성해서 persist()로 디비에 추가




    엔티티 매니저를 구하려면 엔티티 매니저 팩토리가 필요하다. 이 책에서는 그런 팩토리를 위해 보조 클래스를 하나 생성하여 사용하였다.

    어려울것이 없는게 위에 보면 emf,entityManager를 생성하고 emf.close()하는데 이부분을 클래스로 생성해서 사용한다는것이다



    실행하면 ( 어떻게 실행할까 생각하다가 기존에 프로젝트 만들면 기본적으로 제공해주는 HomeController에서 클래스를 불러와서 사용하게 했음 )


    콘솔창에 아래와 같이 뜨면서 디비에도 값이 잘 들어가는것을 볼 수 있다.





    '2017년 > Spring' 카테고리의 다른 글

    spring으로 데이터를 화면에 출력해보자  (0) 2017.10.20
    스프링과 JPA연동 설정 기초  (0) 2017.10.19
    스프링 퀵 스타트 2일차  (0) 2017.10.11
    스프링 퀵 스타트 1일차  (0) 2017.09.27
    tiles를 알아보자  (0) 2017.09.22

    대화의 장 💬