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 파일
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> |
- 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 프로그램
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
- 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("~", ~);
- ORM의 또 다른 핵 iBATIS SQLMaps
- iBATIS 3의 새로운 기능, 2010.3
- Spring 2.5.6에서 SqlMapClientDaoSupport을 이용하여 iBATIS 2.3.4와 연동하는 예, 2009.12
- iBatis 정리, 2010.4
- iBATIS DynamicQuery 사용법
출처 - http://blog.naver.com/goodfe2?Redirect=Log&logNo=150121785142
'Framework & Platform > mybatis' 카테고리의 다른 글
mybatis password 암호화/복호화 (0) | 2012.04.28 |
---|---|
Mybatis selectList 예제 (0) | 2012.03.28 |
mybatis 설치 예제 (0) | 2012.03.18 |
ibatis vs MyBatis (0) | 2012.03.15 |
iBATIS(MyBatis) (0) | 2012.03.12 |