2021년 목표설정

이미지
기본적으로 작년에 달성하지 못한 것들을 하려고 생각중인데..코로나가 언제까지 이어질지, 한국이나 북해도는 갈 수 있을지..자격증은 응시 가능할지..여러가지가 불확실하다. 2021년은 무엇보다 정신적인 부분과 경제적인 부분에 중점을 두고 조금 더 치열하게 지내보고 싶다. 일본나이로도 30대 마지막 해, 이제 불혹에 접어드는 나이..복잡하지만 심플하게. 육체적목표 : 트라이에슬론 스탠다드 도전하기 정신적 : 자격증2개 도전 + 자체개발 서비스 론칭 가족적 : 가정의 평화를 유지하기 경제적 : 외식과 유흥비를 줄이고 부수입을 늘려서 결과적으로 저축하기 사회적 : 목표세미나를 포함해서 민단과 개인인맥의 활성화와 교류를 촉진하기

iBATIS 개요

iBATIS는 데이터베이스에 있는 자원들을 보다 쉽게 이용하기 위한 기술이다.

DB와 자바 객체간의 직접적인 동기화를 이루는 ORM(Object Relational Mapper)은 아니며, 자바 객체를 PreparedStatement 파라미터와 ResultSet으로 쉽게 매핑할 수 있도록 도와주는 간단한 기능을 제공한다.

개발자는 프로그램에서 사용될 SQL 문장들을 간단한 XML파일 형태로 작성하여 코드와 SQL문을 분리하고, 자바 객체와 XML 사이에 매핑을 걸어 이를 사용한다. 자바 코드 내에서 특정 쿼리문을 실행하기 원할 때, 파라미터와 필요한 조건을 넘기기 위한 객체를 생성하고, SQLMaps를 실행하기 위한 쿼리의 객체와 이름을 넘겨준다. 쿼리가 실행되었을 때 SQLMaps는 쿼리 결과를 받기 위해 정의된 클래스의 인스턴스를 생성하게 되는데, 이는 데이터베이스에 의해 반환된 ResultSet으로부터 만들어진다. 이것이 iBATIS의 기본적인 생각과 실행 절차이다.


<SQLMaps의 구조>


1. iBATIS를 사용하기 위한 파일구성

→ SQL Map Configuration XML 파일 - 데이터베이스 관련 설정 및 SQL Map들의 정보
→ SQL Map XML 파일 - SQL 구문
→ iBATIS 라이브러리 - iBATIS API


2. SQL Map Configuration 파일의 간단한 예(SqlMapConfig.xml)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"

<sqlMapConfig>

<!-- 프로퍼티 값을 외부로 빼내서 사용하기 위한 설정 -->
<properties resource="SqlMapConfig.properties" />

<!--
SQLMaps에서 사용되는 다양한 옵션과 최적화를 위한 설정

cacheModelsEnabled
- SqlMapClient를 위한 모든 캐시모델 설정
- default : true

enhancementEnabled
- 런타임시 바이트코드 향상 설정
- default : false

lazyLoadingEnabled
- lazy로딩 설정
- default : true

maxRequests
- 동시에 SQL문을 수행할 수 있는 쓰레드 수
설정값을 초과한 쓰레드는 다른 쓰레드가 종료될때까지 블록된다.
- default : 512
maxSessions
- 주어진 시간동안 활성화될 수 있는 세션 수
- default : 128

maxTransactions
- 한꺼번에 SqlMapClient.startTransaction()에 들어갈수 있는 쓰레드의 최대개수.
설정값을 초과한 쓰레드는 다른 쓰레드가 종료될때까지 블록된다.
- default : 32

useStatementNamespace
- 활성화된 경우 sqlmap이름과 statement이름으로 구성된 전체이름으로 매핑된 statement를 참조해야 한다.
- ex) queryForObject("sqlMapName.statementName");
- default : false
-->
<settings>
useStatementNamespaces="true"
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
maxRequests="512"
maxSessions="128"
maxTransactions="32"
</settings>

<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>

<!-- SQLMap 설정파일 선언 -->
<sqlMap resource="../spring-config/ibatis/Member.xml" />
<sqlMap resource="../spring-config/ibatis/Join.xml" />
<sqlMap resource="../spring-config/ibatis/Board.xml" />
.
.
.
</sqlMapConfig>

3. SQL Map 파일의 간단한 예(Member.xml)

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"

<sqlMap namespace="Member">
<!-- Member 클래스에 대한 짧은 이름 선언 -->
<typeAlias alias="member" type="com.skyunoe.model.Member"/>

<resultMap class="member" id="MemberResult">

<!-- Column 은 Real DB의 필드명 -->
<result property="seq" column="seq"/>
<result property="userid" column="user_id"/>
<result property="passwd" column="user_pwd"/>
</resultMap>
<!-- SQL문 작성 -->
<select id="getMember" parameterClass="string" resultClass="member">
<![CDATA[
SELECT seq as seq,
user_id as userid,
user_pwd as passwd
FROM tb_member
WHERE user_id = #Value#
]]>
</select>
<insert id="insertMember" parameterClass="member">
<![CDATA[
INSERT INTO tb_member(user_id, user_pwd) VALUES (#userid#, #passwd#)
]]>
</insert>
<delete id="deleteMember">
<![CDATA[
DELETE FROM tb_member WHERE seq = #Value#
]]>
</delete>

<update>
...
</update>

<statement>
...
</statement>

<procedure>
...
</procedure>

</sqlMap>


4. iBATIS를 사용하기 위한 자바코드 예

private static SqlMapClient sqlMapper;

Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);

public Member getMember(String uid) {

Member member = null;

try {
member = (Member)sqlMapper.queryForObject("getMember", uid);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}

return member;
}

※ 이 글은 iBATIS에 대한 기본 개념과, 사용에 대한 간단한 설명이므로, 보다 자세한 정보는 직접 찾아보기 바랍니다.
[출처] iBATIS - SQL Maps 활용|작성자 깡통
------------------------------------------------------------------------------------------------------
사족 : 대략 무슨 내용인지 감은 잡히는데 실제 적용 및 사용에는 시간이 걸릴 듯...
그리고, 프로젝트가 아파치그룹에서 구글로 옮겨가면서 이름이 myBATIS 던가로 변경되었다는 정보..
라이브러리는 다운 받았으나 새로운 버전에 대한 관련정보는 매우 적으므로 영문원서를 읽으라는 압박.

댓글

이 블로그의 인기 게시물

[메모] PostgreSQL에서 Insert 하는 경우 자동채번 PK가 중복에러 나는 경우

[C# & LINQ] 랜덤으로 데이터를 한 개 추출하는 방법

[react-native] uuid 생성이 에러가 날 때 대처법