ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JPA의 개념
    Spring_FrameWork 2018. 11. 27. 19:08

    1. 우리가 사용하는 대부분 프로그램은 사용자가 입력한 데이터나 비즈니스 로직 수행 결과로 얻은 데이터를 재사용할수 있도록 데이터 베이스에 저장한다.

      하지만 자바의 객체와 데이터 베이스의 테이블이 정확하게 일치하지 않는다. 따라서 둘 사이를 매핑하기 위해 많은 SQL 구문과 자바 코드가 필요할 수 밖에 없다 .

      ORM(Object-Relation Mapping)은 이렇게 정확하게 일치하지 않는 자바객체와 테이블사이틀 매핑해준다 다시말하면 ORM 은 자바객체에 저장된 데이터를 테이블의 ROW 정보로 저장하고 , 반대로 테이블에 저장된 Row 정보를 자바객체로 매핑해준다 .

      이 과정에서 사용되는 SQL 구문과 자바코드를 ORM 프레임워크가 자동으로 만들어준다 .

      우리는 지금까지 스프링 JDBC나 Mybatis를 이용하여 자바객체와 테이블을 매핑해 왔다 . 하지만 어떤 DB 연동 기술이나 프레임 워크를 사용하더라도 SQL 명령어를 자바 클래스나 외부의 XML 파일에 작성해야 했다 . 그리고 이렇게 작성된 SQL은 유지보수 과정에서 지속적으로 수정되며 새로운 SQL이 추가되기도 한다.

      ORM 프레임워크의 가장 큰 특징이자 장점은 DB연동에 필요한 SQL을 자동으로 생성한다는 것이다. 또한 이렇게 생성되는 SQL은 DBMS가 변경될때 자동으로 변경된다. 다만 ORM 환경설정파일 어딘가에 DBMS가 변경되었다는 것만 수정해주면 된다. 

      그 ORM  프레임 워크의 표준화된것이 JPA라고 한다

      JPA의 특징

      JPA는 모든 ORM 구현체(ORM 프레임워크)들의 공통 인터페이스를 제공한다.

      JPA를 JDBC API 와 비교하여 이해하면 편하다 

      JDBC는 특정 DBMS에 종속되지 않는 DB 연동을 구현을 지원한다. DB연동 로직을 구현할때, JDBC API(java.sql)의 인터페이스들을 이용하면 실질적인 DB연동 처리는 해당 DBMS 드라이버 클래스들이 담당하는 구조이다. 따라서 DBMS가 변경되는 상황에서도 드라이버만 변경하면 JDBCAPI를 이용하는 어플리케이션은 수정하지 않는다 . 결국 개발 당시에는 MySQL을 사용하다가 실제 서비스가 오픈될때 Oracle로 변경할수도있다.

      JPA도 JDBC와 마찬가지이다 . 애플리케이션을 구현할때 , JPA API(javax.persistence)를 이용하면 개발당시에는 Hiberinamte 를 프레임 워크를 사용하다가 실제 서비스에는 TOPLink로 변경할 수 있다.


    2. MYbatis연동오류

      문제해결] 심각: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener

      <Case 1>2012. 4. 3 오전 11:18:51 org.apache.catalina.core.StandardContext listenerStart심각: Error configuring application listener of class org.springframework.web.context.ContextLoaderListenerjava.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListenerat org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1688)

      <Case 2>6월 10, 2013 1:54:15 오후 org.apache.catalina.core.StandardContext listenerStartSEVERE: Error configuring application listener of class org.springframework.web.util.Log4jConfigListenerjava.lang.ClassNotFoundException: org.springframework.web.util.Log4jConfigListenerat org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1713)

      두가지 경우 모두 maven dependency를 등록해주면 된다.
      프로젝트 >> properties >> Deployment Assembly를 선택한 후,“Add” >> Java Build Path Entries >> Maven Dependencies 선택한 후, “Apply"를 해준다.
      톰캣 재시작하면 서버가 정상적으로 실행된다.
      메이븐 메뉴에서 "Update Project Configuration"를 실행하는 경우,해당 정보가 삭제되므로 다시 등록해주면 된다.

      No qualifying bean of type ‘org.mybatis.spring.SqlSessionTemplate’ available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}]

      sqlsession Template가 주입이 안됨 이리저리 코드를 뒤졌지만 

      역시 안된다 .

      찾아보니 데이터 소스설정이 잘못되어있었다 

      sqlsession 이 생성 되지 않을때는 

      sqlsessionfactorybean 설정 

      그위에 DataSource  설정을 잘 살펴볼것 

      이것때문에 하루 날림


      <!– DataSource 등록 –>
      <context:property-placeholder
      location="classpath:config/database.property” />
      <bean id=“dataSource”

      class=“org.springframework.jdbc.datasource.DriverManagerDataSource” >

      <property name=“driverClassName”
      value=“${jdbc.driverClassName}” />
      <property name=“url” value=“${jdbc.uri}” />
      <property name=“username” value=“${jdbc.username}” />
      <property name=“password” value=“${jdbc.password}” />
      </bean>

      <!– Spring과 Mybatis 연동설정 –>
      <bean id =“sqlSession” class=“org.mybatis.spring.SqlSessionFactoryBean”>
      <property name=“configLocation” value=“classpath:sql-map-config.xml”>
      </property>
      <property name=“dataSource” ref=“dataSource”>
      </property> 
      </bean>
      <bean class=“org.mybatis.spring.SqlSessionTemplate”>
      <constructor-arg ref=“sqlSession”></constructor-arg>
      </bean>



    'Spring_FrameWork' 카테고리의 다른 글

    Mybatis의 로그 log4jdbc-log4j2 설정  (0) 2018.11.27
    2018_10_11 스프링 세팅 절차 mybatis config 설정 WEB.xml 설정  (0) 2018.11.27
    Mybatis JAVA API  (0) 2018.11.23
    Mybatis 구조  (0) 2018.11.23
    자바객체 XML로변환  (0) 2018.11.23
Designed by Tistory.