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
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
useStatementNamespaces="true"
/>
<typeAlias alias="emp" type="com.oracleclub.study.mvc.model.Emp"/>
<sqlMap resource="sqlmap/CacheModel.xml"/>
<sqlMap resource="sqlmap/Emp.xml"/>
</sqlMapConfig>
| 속성 | 설 명 | 사용 예 |
|---|---|---|
| cacheModelsEnabled | SqlMapClient의 캐쉬모델을 설정 한다. | cacheModelsEnabled="true" Default: true (enabled) |
| lazyLoadingEnabled | SqlMapClient의 모든 늦은(lazy)로딩을 설정한다. | lazyLoadingEnabled="true" Default: true (enabled) |
| enhancementEnabled | CGLIB에 최적화된 클래스를 통해 향상된 늦은(lazy)로딩사용여부를 선택한다. | enhancementEnabled="true" Default: false (disabled) |
| useStatementNamespaces | SQLMap XML 파일에서 namespace를 사용할 수 있다. <sqlMap namespace="article"> | useStatementNamespaces="true" Default: false (disabled) |
SqlMap XML 예
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="emp">
<select id="selectEmpList" resultClass="emp" parameterClass="int" cacheModel="cachemodel.empCache" >
SELECT empno, ename, job, sal, mgr
FROM emp
<isGreaterThan compareValue="0">
WHERE deptno = #deptno#
</isGreaterThan>
</select>
<insert id="insertEmp" parameterClass="emp" >
INSERT INTO emp (empno, ename, job, sal, mgr, hiredate, deptno)
VALUES (#empno#, #ename#, #job#, #sal#, 0, SYSDATE, #deptno#)
</insert>
</sqlMap>
| Statement | 속 성 | 설 명 |
|---|---|---|
| <statement> | id parameterClass resultClass parameterMap resultMap cacheModel | 모든 쿼리 구문 사용 |
| <insert> | id parameterClass parameterMap | 데이터 입력 |
| <update> | id parameterClass parameterMap | 데이터 수정 |
| <delete> | id parameterClass parameterMap | 데이터 삭제 |
| <select> | id parameterClass resultClass parameterMap resultMap cacheModel | 데이터 조회 |
| <procedure> | id parameterClass resultClass parameterMap resultMap | 저장 프로시저 호출 |
#과 $의 차이
# 예
SELECT * FROM emp WHERE empno = #empno#
→ SELECT * FROM emp WHERE empno = ?
empno 파라미터 값이 바뀌어도 DB에서는 하나의 SQL 문장으로 처리
$ 예 (보안 및 성능문제가 있기 때문에 절대 사용하지 말 것
SELECT * FROM emp WHERE empno = $empno$
→ SELECT * FROM emp WHERE empno = 1024
empno 파라미터 값이 바뀔 때 마다 DB에서는 서로 다른 SQL 문장으로 처리
| API | 설 명 |
|---|---|
| insert() | insert 쿼리 |
| update() | update 쿼리 |
| delete() | delete 쿼리 |
| queryForObject() | select 쿼리 1개 결과 반환, object형 |
| queryForMap() | select 쿼리 1개 결과 반환, map형 |
| queryForList() | select 쿼리 1개 이상 row 반환 |
| flushDataCache() | 캐쉬된 데이터 삭제 |
| startTransaction() | transaction 시작 |
| commitTransaction() | transaction 커밋 |
| endTransaction() | transaction 종료 |