Programing/egovFramework

전자정부프레임워크 iBatis, MyBatis 설정 방식 차이, 비교

리커니 2017. 8. 29.
반응형

 

전자정부프레임워크 iBatis, MyBatis 설정 방식 차이

 

MyBatis 의 구버젼인 iBatis 와의 설정 방식 차이에 대해서 알아보겠습니다.

(같은 DAO 형태로 사용하는 경우를 예로 설명하겠습니다.)

 

전자정부프레임워크에서는 MyBatis와 iBatis 설정이 모두 되어 있습니다.

그러므로 그냥 쓰고싶은 설정을 해서 사용하면 되는 것이죠.

 

그럼 차근차근 순서대로 각각의 설정에 대해 알아보도록 하겠습니다.

 

전자정부프레임워크를 활용하지 않을 경우에는 pom.xml 에 각각의 설정을 해줘야 합니다.

 

예시)

 

<!-- myBatis setting -->

 

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.2.2</version>
</dependency>

 

<!-- iBatis setting --> 

 

<dependency>

     <groupId>org.apache.ibatis</groupId>

<artifactId>ibatis-sqlmap</artifactId>

<version>2.3.4.726</version>

</dependency>

 

하지만 위에서 말씀드린데로 전자정부프레임워크에는 설정이 모두 있으니 추가 할 필요는 없습니다.

 

그럼 다음으로 spring 설정 파일 쪽을 확인해보도록 하죠.

 

프로젝트의 web.xml을 보시게 되면 spring에서 필요한 설정파일 위치를 등록한 곳이 있습니다.

 

 <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath*:egovframework/spring/context-*.xml</param-value>
 </context-param>

 

위의 설정된 폴더로 이동해 보도록 하죠.

 

여러 파일들이 있습니다.

context-aspect.xml

context-common.xml

context-datasource.xml

context-idgen.xml

context-mapper.xml

context-sqlMap.xml

context-properties.xml

context-transaction.xml

context-validator.xml

 

 

 

 

이 파일들에 대한 설명은 아래의 Link를 확인하세요.

Link : 전자정부프레임워크 설정파일

 

이중에서 iBatis 설정에 필요한 파일은 context-sqlMap.xml

myBatis 설정에 필요한 파일은 context-mapper.xml 입니다.

 

iBatis 설정파일(context-sqlMap.xml) 부터 보도록 하겠습니다.

 

 <bean id="sqlMapClient" class="egovframework.rte.psl.orm.ibatis.SqlMapClientFactoryBean">
      <property name="configLocation" value="classpath:/egovframework/sqlmap/sql-map-config.xml"/>
      <property name="dataSource" ref="dataSource"/>
 </bean>

 

전자정부에서 제공하는 ibatis SqlMapClientFactoryBean 클래스를 활용하고 있죠.

iBatis 설정파일과 디비 접속 정보를 프로퍼티로 전달하고 있습니다.

 

설정파일 sql-map-config.xml 에

프로젝트에서 사용할 Query xml을 모두 등록 해야 합니다.

ex)

 

<sqlMapConfig>
     <sqlMap resource="egovframework/sqlmap/oracle/admin/main/Main_SQL.xml"/>

.

.

.

</sqlMapConfig>

 

그래야 dao에서 요청에 있을 때 해당 sqlMap 내에서 id를 찾아 디비를 호출 할 수 있죠.

아래는 myBatis의 설정파일입니다.(context-mapper.xml)

 

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
      <property name="dataSource" ref="dataSource" />
      <property name="configLocation" value="classpath:/egovframework/sqlmap/oracle/sql-mapper-config.xml" />
      <property name="mapperLocations" value="classpath:/egovframework/sqlmap/oracle/mappers/**/*.xml" />
 </bean>

 

iBatis와 다르게 spring에서 제공하는 SqlSessionFactoryBean 클래스를 활용하고 있습니다.

그리고 mapperLocations라는 프로퍼티를 하나 더 사용 하고 있죠.

이 설정을 활용해 iBatis에서 일일히 Query xml을 등록하는 작업을 하지 않아도 됩니다.

저 경로에 있는 xml을 읽어드리기 때문이죠.

그래서 설정파일에서 기본적인 설정만 해주어도 되는것이죠. 따로 설정할 것이 없다면 configLocation을 제거하셔도 됩니다.

 

그 다음 차이를 보이는 곳은 DAO 인데요.

 

iBatis에서는 EgovAbstractDAO 를,

myBatis에서는 EgovAbstractMapper 를 extends 해서 사용하게 됩니다.

 

여기서 차이가 나는 것은 extends된 클래스에서 사용되는 CRUD 메소드 들인데요.

 

예를들어 iBatis 에서 리스트 형식으로 데이터를 받아올 때 list 메소드를 사용했다면

myBatis에서는 selectList라는 메소드를 사용하게 됩니다.

 

 @SuppressWarnings("unchecked")
 public List<TestVO> getTestList(SearchVo param) throws Exception {
      return (List<TestVo>) list("test.getTestList", param);
 }

 

 public List<TestVO> getTestList(SearchVO param) throws Exception{
      return selectList("testDAO.getTestList", param);
 }

 

 

(myBatis에서는 리턴타입의 형변환을 안해줘도 에러가 나지 않더군요.)

 

그리고 또 하나의 차이점은 기존에 iBatis에서 사용하던 parameterClass, resultClass 가

parameterType, resultType으로 변경 되었습니다.

 

이제 설정쪽의 차이는 거의 확인을 한 것 같습니다.

 

iBatis와 myBatis 는 동적태그 사용할 때도 차이 가 있습니다.

예를 들어 iBatis에서 isEqual, isEmpty 와 같이 사용하던 태그를

myBatis에서는 if 태그 등으로 사용할 수 있게 바뀌었죠.

 

개발자 입장에서는 보다 편해진것 같습니다.

 

동적 태그에 관련해서는 아래의 Link를 참조하세요.

 

Link : iBatis, myBatis 동적 태그 비교 정리 Dynamic SQL

 

반응형

댓글

💲 추천 글