일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 입출력
- 자바의정석
- 멀티태스킹
- 혼공얄코
- SQL Mapper
- 프로그래머스 붕대 감기
- continue 사용법
- 자바의 정석
- 붕대 감기 자바
- 리눅스
- contiune
- 쿠키
- 티스토리챌린지
- CPU
- over()
- 붕대 감기
- 오버라이딩
- hackerrank
- 프로그래머스
- 중첩 break
- 오블완
- 다형성
- 객체지향
- java
- break 사용법
- 멀티프로세싱
- 캡슐화
- 오버로딩
- spring security
- spring security 설정
- Today
- Total
쉽게 쉽게
SqlMapClientTemplate 본문
오래된 프로젝트 중 SqlMapClientTemplate을 사용하는 프로젝트가 있어 SqlMapClientTemplate가 어떤 것인지 알아보려고 한다.
SqlMapClientTemplate은 이전에 다뤘던 SQL Mapper와 ORM 글에서 설명한 SQL Mapper 중 iBatis에 해당한다.
2023.05.14 - [개발공부/CS] - SQL Mapper와 ORM이란?
1. SqlMapClientTemplate이란?
SqlMapClientTemplate은 Spring 프레임워크에서 제공하는 클래스로, SqlMapClient 인터페이스의 구현체다.
SqlMapClient 인터페이스는 iBATIS(아이바티스) 프레임워크에서 사용되는 인터페이스로, SQL 쿼리를 실행하기 위한 다양한 메서드를 제공한다.
SqlMapClientTemplate은 SqlMapClient를 인터페이스를 구현하여 , 데이터베이스 연동을 쉽게 처리할 수 있도록 돕는다.
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은 다음과 같은 속성을 갖는다.
- SqlMapClient: SqlMapClient 인스턴스를 지정 (필수)
- DataSource: 데이터베이스 연결에 사용할 DataSource를 지정
- SqlMapClientOperations: SqlMapClientTemplate이 사용할 SqlMapClientOperations를 지정 (SqlMapClient 인스턴스를 직접 생성하여 사용하는 경우에만 필요합니다.)
- SqlMapClientCallback: SqlMapClientCallback을 사용하여 SqlMapClient에서 실행될 콜백을 지정 (선택적)
- LobHandler: LOB(대용량 객체)을 처리하는 데 사용할 LobHandler를 지정 (선택적)
- 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를 사용한다.
잘못된 내용이 있다면 지적부탁드립니다. 방문해주셔서 감사합니다. |
'프로젝트 경험' 카테고리의 다른 글
[HTML] textarea 출력시 공백과 개행 처리 (0) | 2024.06.26 |
---|---|
[ibatis] DML(insert, update, delete)의 return값 (0) | 2023.07.23 |
SVN 프로젝트 merge 충돌 (0) | 2023.07.09 |
IP주소 찾는법 (0) | 2023.06.04 |
자바 프로젝트 SVN 연동 (0) | 2023.06.04 |