IBatis
Java에서 SQL Maps and Data Access Objects (DAO)로 알려진 Database 연동 플랫폼인 iBatis를 정리 한다.
- 홈페이지 : http://ibatis.apache.org/
- 다운로드 : http://ibatis.apache.org/java.cgi
- 라이선스 :
- 플랫폼 :
목차
iBatis 환경 설정
- ORM(Object Relational Mapping)
- 데이터베이스의 레코드를 직접 Java Class에 매핑하고 XML 형태의 SQL 문을 실행하는 Persistence Layer를 담당하는 Framework 개발 모델
- /WEB-INF/classes/sqlMapConfig.xml : DB 정보와 mapper file 정보 등의 환경 설정 파일
- mapper file (~Map.xml) : 실제 SQL문을 작성하는 XML 파일
sqlMapConfig.xml
settings |
|
typeAlias |
<typeAlias alias="Account" type="org.apache.domain.Account" /> |
typeHandler |
<typeHandler javaType="String" callback="com.StringTypeHandler"/> |
properties |
<properties resource="SqlMapConfig.properties" /> |
sqlMap |
<sqlMap resource="sqlMaps/board.xml" /> |
transactionManager |
<transactionManager type="JDBC"> <dataSource type="DBCP"> <property name="JDBC.Driver" value="${driver}" /> <property name="JDBC.ConnectionURL" value="${url}" /> <property name="JDBC.Username" value="${username}" /> <property name="JDBC.Password" value="${password}" /> <property name="JDBC.DefaultAutoCommit" value="false" /> </dataSource> </transactionManager> |
Mapper file
- Parameter, Query 문에서 해당 변수를 매개 변수로 사용
- #name#
- #name:VARCHAR#, #mailDomainSeq:INTEGER#
- #nameArray[]#
- Variable : $~$, 해당 변수로 Query문을 직접 생성
- ? :
- <![CDATA[ <= ]]>
resultMap |
<resultMap class="boardbean" id="boardbean"> <result property="postId" column="post_Id"/> <result property="seq" column="SEQ" jdbcType="INTEGER" /> <result property="detail" resultMap="Catetory.ChildMap"/> </resultMap> | ||||||||||||||
parameterMap |
<parameterMap class="boardbean" id="boardbean"> <parameter property="postId" /> </parameterMap> | ||||||||||||||
select |
<select id="readDeletedScheduleListAfterSyncTime" parameterClass="map" resultMap="schedulerResult"> select * from parentTable a left outer join childTable b on a.SEQ = b.PARENT_SEQ where mail_user_seq = #mailUserSeq# and outlook_sync = 'delete' and modify_time <![CDATA[ >= ]]> #syncTime# order by start_date asc limit #skipResult#, #maxResult# </select> | ||||||||||||||
selectKey |
<selectKey resultClass="int" keyProperty="bbsId"> select case when max(bbs_id) is null then 1 else max(bbs_id)+1 end from tscheduler </selectKey> | ||||||||||||||
insert |
<insert id="saveShareFolder" parameterClass="map"> insert into shf_shr_folder (mail_user_seq, folder_uid) values (#userSeq#, #fUid#) </insert> | ||||||||||||||
update |
<update id="modifyAuthShareTargetFolder" parameterClass="webfoldershare"> update shf_shr_target set share_auth = #auth#, modify_time = #curTime# where folder_uid = #fuid# and share_value = #email# </update> | ||||||||||||||
delete |
<delete id="deleteShareTargetFolder" parameterClass="int"> delete from shf_shr_target where folder_uid = #value# </delete> | ||||||||||||||
dynamic |
<dynamic prepend="WHERE"> <iterate property="postId" conjunction="," open="post_id IN (" close=")" > #postId[]# </iterate> </dynamic> <dynamic prepend="and"> <isGreaterThan property="userSeq" compareValue="0"> mail_user_seq = #userSeq# </isGreaterThan> </dynamic> | ||||||||||||||
연산 |
| ||||||||||||||
cacheModel |
<cacheModel id="decisionPathCache" type="MEMORY" readOnly="true" serialize="false"> <flushInterval hours="24"/> <flushOnExecute statement="SystemConfig.allCacheDelete"/> <property name="reference-type" value="SOFT"/> </cacheModel> | ||||||||||||||
sql |
<sql id="getMember_Where_Clause" > </sql> | ||||||||||||||
include |
<include refid="getMember_Where_Clause" /> | ||||||||||||||
procedure |
|||||||||||||||
statement |
<statement id="test" parameterClass="package.ClassName" > | ||||||||||||||
Collection |
|||||||||||||||
RowHandler |
- Mapper file 사용법
- Cache (CacheModel)
- Sub Query 사용
- List<MessageVO>
DAO 프로그램
SqlMapClient
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml"); SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
query
- Select
User user = (User) sqlMap.queryForObject(id, parameter); sqlMap.queryForList(id, parameter); sqlMap.queryForMap(id, parameter, key);
- Insert
Map map = new HashMap(); map.put("mailUserSeq", userSeq); map.put("agingDay", agingDay); sqlMap.insert("~", map);
- Update
HashMap<String, Object> param = new HashMap<String, Object>(); param.put("mailDomain", domainSeq); param.put("userSeq", userSeq); sqlMap.update("~", param);
- Delete
sqlMap.delete("~", ~);