쉽게 쉽게

SqlMapClientTemplate 본문

프로젝트 경험

SqlMapClientTemplate

곱마2 2023. 5. 28. 20:16
반응형

오래된 프로젝트 중 SqlMapClientTemplate을 사용하는 프로젝트가 있어 SqlMapClientTemplate가 어떤 것인지 알아보려고 한다.

SqlMapClientTemplate은 이전에 다뤘던 SQL Mapper와 ORM 글에서 설명한 SQL Mapper 중 iBatis에 해당한다. 

2023.05.14 - [개발공부/CS] - SQL Mapper와 ORM이란?

 

SQL Mapper와 ORM이란?

1. JDBC란? 프로젝트에서 객체 지향 프로그래밍과 DB를 연결하는 방법은 여러 가지가 있으며 이를 제공하는 프레임워크가 Persistence Framework(영속성 프레임워크)이다. 영속성이란? 더보기 영속성(pers

minsu092274.tistory.com

1. SqlMapClientTemplate이란?

SqlMapClientTemplate은 Spring 프레임워크에서 제공하는 클래스로, SqlMapClient 인터페이스의 구현체다.

SqlMapClient 인터페이스는 iBATIS(아이바티스) 프레임워크에서 사용되는 인터페이스로, SQL 쿼리를 실행하기 위한 다양한 메서드를 제공한다.

SqlMapClientTemplateSqlMapClient를 인터페이스를 구현하여 , 데이터베이스 연동을 쉽게 처리할 수 있도록 돕는다.

2. SqlMapClientTemplate 구현

SqlMapClientTemplate은 iBatis의 SqlMapClient 객체를 사용하므로, SqlMapClient 객체를 먼저 설정해야 한다. SqlMapClient 객체는 iBatis의 설정 파일인 SqlMapConfig.xml에서 생성한다.

SqlMapClientTemplate을 사용하려면, Spring의 설정 파일에서 다음과 같이 빈(Bean)을 등록해야 한다.

이 빈을 등록할 xml 파일명을 context-sqlMap.xml로 할 것이다.

빈을 등록한 이후에는 sqlMapConfig.xml라는 sqlMapClient가 사용되는 곳의 정보가 담긴 xml 파일을 설정할 것이다.

 context-sqlMap.xml에 빈으로 설정한 정보는 아래와 같다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
    
	<bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" lazy-init="true" />

	<!-- SqlMap setup for iBATIS Database Layer -->
	<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">		
		<property name="configLocation" value="/WEB-INF/ibatis/sqlMapConfig.xml"></property>
		<property name="dataSource" ref="dataSource"/>		
		<property name="lobHandler" ref="lobHandler"/>
	</bean>
    
    <bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate">
        <property name="sqlMapClient" ref="sqlMapClient"></property>
    </bean>


</beans>

 context-sqlMap.xml에서 설정한 정보를 해석하자면

SqlMapClientTemplate은 sqlMapClient의 정보를 참조하고 있고

sqlMapClient은 DB 접속 정보(dataSource)와 ibatis 설정 정보(sqlMapClient)를 가지고 있다.

dataSource 소스는 아래처럼 db 접속정보를 정의한 것을 말한다.

(필자는 미리 dbconnection.properies 파일에 정의해 놓았다.)

 <bean id="dataSource"
            class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="core.log.jdbc.driver.OracleDriver"></property>
        <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:XE"></property>
        <property name="username" value="????"></property>
        <property name="password" value="????"></property>
    </bean>

'/WEB-INF/ibatis/sqlMapConfig.xml'은 sqlMapClient가 사용되는 곳의 정보가 담긴 xml 파일의 위치를 말한다.

 

조금 더 속성에 대해 알아보자면 SqlMapClientTemplate은 다음과 같은 속성을 갖는다.

  1. SqlMapClient: SqlMapClient 인스턴스를 지정 (필수)
  2. DataSource: 데이터베이스 연결에 사용할 DataSource를 지정
  3. SqlMapClientOperations: SqlMapClientTemplate이 사용할 SqlMapClientOperations를 지정 (SqlMapClient 인스턴스를 직접 생성하여 사용하는 경우에만 필요합니다.)
  4. SqlMapClientCallback: SqlMapClientCallback을 사용하여 SqlMapClient에서 실행될 콜백을 지정 (선택적)
  5. LobHandler: LOB(대용량 객체)을 처리하는 데 사용할 LobHandler를 지정 (선택적)
  6. SqlMapClientTemplate: SqlMapClientTemplate 인스턴스 이름을 지정 (선택적)

이 중에서 SqlMapClient는 필수 속성으로서, SqlMapClientTemplate을 사용하기 위해서는 SqlMapClient 인스턴스를 먼저 생성해야 한다.

필요한 경우 SqlMapClientCallback, LobHandler 등의 속성을 지정하여 SqlMapClientTemplate을 더욱 세부적으로 설정할 수 있다.

SqlMapClientTemplate 속성은 SqlMapClientTemplate 인스턴스의 이름을 지정하는 데 사용된다. 이 속성을 지정하지 않으면 기본 이름이 사용된다.

 

context-sqlMap.xml 설정이 끝나면 사용될 곳 정보인 SqlMapConfig.xml을 설정해주면 된다.

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE sqlMapConfig      
    PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"      
    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>
	<settings useStatementNamespaces="true"/>
	<sqlMap resource="~/sqlmap/sql/common.xml" />
</sqlMapConfig>

~/sqlmap/sql/common.xml(앞 경로는 생략)은 sqlMapClient가 사용될 sql 구문을 담은 xml 파일이다.

이렇게 하면 설정은 완료되고 이제 사용만 하면 된다.

 

SqlMapClientTemplate 사용

SqlMapClientTemplate은 위와 같이 빈으로 등록한 후, DI(Dependency Injection)을 통해 사용할 수 있다. SqlMapClientTemplate은 SqlMapClient의 모든 기능을 제공하므로, iBatis의 SqlMapClient와 유사하게 사용할 수 있다.

@Autowired private SqlMapClientTemplate sqlMapClientTemplate;

 

SqlMapClientTemplate 인터페이스에는 다음과 같은 주요 메서드가 있습니다.

메서드 사용시 "user.getUserInfoById"의 뜻은 SqlMapConfig.xml에서 정의한 SQL 맵핑 파일에서 해당 SQL문을 찾아 실행한다.

SQL 맵핑 xml 파일의 namespace가 user이며 그 안에 정의해 놓은 sql문의 명이 getUserInfoById이다.

 

queryForObject: 단일 객체를 반환하는 쿼리를 실행한다.

public Map getDetailUser(Map parameter) {
		Map rowMap = (Map)sqlMapClientTemplate.queryForObject("user.getUserInfoById", parameter);
}

queryForList: 리스트 객체를 반환하는 쿼리를 실행한다.

public Map getListUser(Map parameter) { 
		List list = sqlMapClientTemplate.queryForList("user.getListUser", parameter) ; 
}

insert: 새로운 레코드를 추가합니다.

public Map insertUser(Map parameter) {        
        int idx = (int) sqlMapClientTemplate.insert("user.insertUser", parameter);
}

update: 기존 레코드를 업데이트한다.

public Map updateUser(Map parameter) {    
	int cnt = (int) sqlMapClientTemplate.update("user.updateUser", parameter);
    }

delete: 기존 레코드를 삭제한다.

public Map deleteUser(Map parameter) {
	sqlMapClientTemplate.delete("user.deleteUser", parameter);
    }

 

3. SqlMapClientTemplate와 JdbcTemplate 차이점

JdbcTemplate과 SqlMapClientTemplate은 모두 Spring Framework에서 데이터베이스 액세스를 단순화하는 기능을 제공한다. 하지만 두 가지 템플릿은 다른 데이터 액세스 기술을 사용한다.

JdbcTemplate은 JDBC를 사용하고 SqlMapClientTemplate은 iBATIS를 사용한다.

잘못된 내용이 있다면 지적부탁드립니다. 방문해주셔서 감사합니다.
반응형