Cache 적용 예
<cacheModel id="empCache" type="LRU" readOnly="true" serialize="false">
<flushInterval minutes="60"/>
<property name="cache-size" value="10" />
<flushOnExecute statement="emp.insertEmp"/>
</cacheModel>
<select id="selectEmpList" resultClass="emp" cacheModel="cachemodel.empCache" >
SELECT empno, ename, job, sal
FROM emp
</select>
| 속성 | 값 | 설 명 |
|---|---|---|
| Id | 캐시 아이디 | |
| type | MEMORY | GC가 발생하기 전까지 메모리에 저장한다. |
| FIFO | First In First Out 캐시 알고리즘 사용 | |
| LRU | Least Recently Used 캐시 알고리즘 사용 | |
| OSCACHE | OSCache 사용 | |
| readOnly | true | 캐시가 읽기 전용이 된다. 동시에 여러 쓰레드가 읽을 수 있다. (기본값) |
| false | 읽기 전용 아님 | |
| serialize | true/false | 직렬화 여부 |
/src/main/resources/sqlmap/CacheModel.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="cachemodel">
<cacheModel id="empCache" type="LRU" readOnly="true" serialize="false">
<flushInterval minutes="60"/>
<property name="cache-size" value="10" />
<flushOnExecute statement="emp.insertEmp"/>
<flushOnExecute statement="emp.deleteEmp"/>
</cacheModel>
</sqlMap>
/src/main/resources/sqlmap/Emp.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="emp">
<typeAlias alias="emp" type="com.oracleclub.study.mvc.model.Emp"/>
<select id="selectEmpList" resultClass="emp" cacheModel="cachemodel.empCache" >
SELECT empno, ename, job, sal, NVL(mgr,0) mgr
FROM emp
</select>
<select id="selectEmp" resultClass="emp" parameterClass="int" >
SELECT empno, ename, job, sal, NVL(mgr,0) mgr, deptno
FROM emp
WHERE empno = #empno#
</select>
<insert id="insertEmp" parameterClass="emp" >
INSERT INTO emp (empno, ename, job, sal, mgr, hiredate, deptno)
VALUES (#empno#, #ename#, #job#, #sal#, 0, #hiredate#, #deptno#)
</insert>
</sqlMap>
/src/main/resources/datasource/sql-map-config.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"
/>
<sqlMap resource="sqlmap/CacheModel.xml" />
<sqlMap resource="sqlmap/Emp.xml"/>
</sqlMapConfig>
{pstm-100001} Executing Statement: SELECT empno, ename, job, sal, NVL(mgr,0) mgr FROM emp
{pstm-100001} Parameters: []
{pstm-100001} Types: []
{rset-100002} ResultSet
{rset-100002} Header: [EMPNO, ENAME, JOB, SAL, MGR]
{rset-100002} Result: [1111, tester, tester, 1111, 0]
{rset-100002} Result: [7369, SMITH, CLERK, 800, 7902]
Cache 'cachemodel.empCache': stored object 'Emp[empno=1111,mgr=0,sal=1111,deptno=0,ename=tester,job=tester,hiredate=<null>,filename=<null>],...'
Cache 'cachemodel.empCache': retrieved object 'Emp[empno=1111,mgr=0,sal=1111,deptno=0,ename=tester,job=tester,hiredate=<null>,filename=<null>],...'