iBatis 실행 흐름도
Member 테이블을 이용한 iBatis 프레임워크 사용 예
- iBatis SQL config 작성 : iBatis 프레임워크에 대한 설정
<?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>
<!-- Configure a built-in transaction manager. If you're using an
app server, you probably want to use its transaction manager
and a managed datasource -->
<transactionManager type="JDBC" commitRequired="false">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="JDBC.ConnectionURL" value="jdbc:oracle:thin:@127.0.0.1:1521:XE"/>
<property name="JDBC.Username" value="scott"/>
<property name="JDBC.Password" value="tiger"/>
</dataSource>
</transactionManager>
<!-- List the SQL Map XML files. They can be loaded from the
classpath, as they are here (com.domain.data...) -->
<sqlMap resource="config/member2.xml"/> <!-- SQL문을 등록하는 설정파일 설정 -->
</sqlMapConfig>
- SqlMap 파일 작성 : SQL문을 등록하는 설정파일
<?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>
<typeAlias alias="mdto" type="ibatis.dto.MemberDTO"/>
<sql id="select">
select id,
password,
name,
register_number1 as registerNumber1,
register_number2 as registerNumber2,
mileage
from member
</sql>
<!-- resultMapp 설정 -->
<resultMap id="memberRM" class="mdto">
<result property="id" column="id"/>
<result property="password" columnIndex="2"/>
<result property="name" columnIndex="3"/>
<result property="registerNumber1" column="registerNumber1"/>
<result property="registerNumber2" column="registerNumber2"/>
<result property="mileage" columnIndex="6" nullValue="-1"/>
</resultMap>
<!-- insert태그 작성 -->
<insert id="insertMember"
parameterClass="mdto">
<selectKey resultClass="string" keyProperty="password"> <!-- mdto의 password에 9999를 대입 -->
select '999999' from dual
</selectKey>
insert into member(id, password, name, register_number1, register_number2, mileage)
values(#id#,#password#,#name#,#registerNumber1#,#registerNumber2#,#mileage#)
</insert>
<!-- ID로 조회 -->
<select id="selectMemberById"
parameterClass="string"
resultMap="memberRM">
<include refid="select"/>
where id=#value#
</select>
<!-- 주민번호로 조회 -->
<select id="selectMemberByRegisterNumber"
resultMap="memberRM"
parameterClass="hashmap">
<include refid="select"/>
where register_number1=#registerNumber1# and register_number2=#registerNumber2#
</select>
<!-- 전체 회원정보 조회 -->
<select id="selectAllMember" resultMap="memberRM">
<include refid="select"/>
</select>
<select id="selectMemberByMileageRange"
resultClass="mdto"
parameterClass="hashmap">
<include refid="select"/>
where mileage between #mileage1# and #mileage2#
</select>
<!-- update -->
<update id="updateMemberById" parameterClass="mdto">
update member
set password=#password#,
name=#name#,
register_number1=#registerNumber1#,
register_number2=#registerNumber2#,
mileage=#mileage#
where id=#id#
</update>
<!-- delete -->
<delete id="deleteMemberById">
delete member
where id=#id#
</delete>
</sqlMap>
- iBatis DAO(Data Access Object) 작성
package ibatis.dao;
import ibatis.dto.MemberDTO;
import java.io.Reader;
import java.lang.reflect.Array;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class MemberDAO {
private static MemberDAO instance = new MemberDAO();
private SqlMapClient sqlMap; //sql문 실행 메소드를 가진 객체
private MemberDAO() {
try {
Reader reader = Resources.getResourceAsReader("config/SqlMapConfig.xml");
sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
/**
* factory pattern, builder pattern으로 SqlMapClient 객체를 만드는클래스
*/
} catch (Exception e) {
e.printStackTrace();
}
}
public static MemberDAO getInstance() {
return instance;
}
//회원데이터 insert 메소드
public void insertMember(MemberDTO mdto) throws SQLException {
sqlMap.insert("insertMember", mdto);
}
//회원데이터 조회하는 select 메소드
public MemberDTO selectMemberById(String id) throws SQLException {
return (MemberDTO)sqlMap.queryForObject("selectMemberById", id);
}
//주민번호로 조회
public MemberDTO selectMemberByRegisterNumber(String rN1, String rN2) throws SQLException {
HashMap<String , String> map = new HashMap<String, String>();
map.put("registerNumber1", rN1);
map.put("registerNumber2", rN2);
return (MemberDTO)sqlMap.queryForObject("selectMemberByRegisterNumber", map);
}
public List selectAllMemberList() throws SQLException {
return sqlMap.queryForList("selectAllMember");
}
public Map selectAllMemberMap() throws SQLException {
//"id"를 getId()메소드를 통해 map의 키값으로 사용
return sqlMap.queryForMap("selectAllMember", null, "id");
}
public Map selectAllMemberMap2() throws SQLException {
return sqlMap.queryForMap("selectAllMember", null, "id", "name");
//"id"를 getId()메소드를 통해 map의 키값으로 사용, "name"을 getName()메소드를 사용하여
//map의 value값으로 사용, 결국 map에서 key값을 사용해서 Name을 조회
}
public List selectMemberByMileageRange(int mileage1, int mileage2) throws SQLException {
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("mileage1", mileage1);
map.put("mileage2", mileage2);
return sqlMap.queryForList("selectMemberByMileageRange", map);
}
public Map selectMemberByMileageRangeMap(int mileage1, int mileage2) throws SQLException {
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("mileage1", mileage1);
map.put("mileage2", mileage2);
return sqlMap.queryForMap("selectMemberByMileageRange", map, "id");
}
//update 메소드
public int updateMemberById(MemberDTO mto) throws SQLException {
return sqlMap.update("updateMemberById", mto);
}
//delete 메소드
public int deleteMemberById(String id) throws SQLException {
return sqlMap.delete("deleteMemberById", id);
}
}
- 설정된 전역정보와 DAO파일을 테스트하기 위한 메인 클래스 작성
package ibatis.main;
import java.lang.reflect.Array;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import ibatis.dao.MemberDAO;
import ibatis.dto.MemberDTO;
public class TestMember {
public static void main(String[] args) throws SQLException {
MemberDAO dao = MemberDAO.getInstance();
MemberDTO mdto1 = new MemberDTO("a1", "aaa", "강감찬", "123123", "2323232", 1000);
MemberDTO mdto2 = new MemberDTO("a2", "bbb", "황희", "121111", "1111111", 3000);
MemberDTO mdto3 = new MemberDTO("a3", "ccc", "신사임당", "100101", "2222222", 4000);
dao.insertMember(mdto1);
//dao.insertMember(mdto2);
//dao.insertMember(mdto3);
//MemberDTO mdto4 = dao.selectMemberById("a2");
//System.out.println(mdto4);
MemberDTO mdto5 = dao.selectMemberByRegisterNumber("100101", "2222222");
System.out.println("주민번호로 조회 결과 : " + mdto5);
System.out.println("-----전체회원조회 List(향상된 For문)-----");
ArrayList list = (ArrayList)dao.selectAllMemberList();
for(Object obj : list) {
MemberDTO mto = (MemberDTO)obj;
System.out.println(mto);
}
System.out.println("-----전체회원조회 List-----");
for(int i=0; i<list.size(); i++) {
MemberDTO mdto = (MemberDTO)list.get(i);
System.out.println(mdto);
}
//키 값을 이용하여 특정정보를 검색할 때 유리
System.out.println("-----전체회원조회 Map-----");
Map map = dao.selectAllMemberMap();
System.out.println(map);
System.out.println("-----전체회원조회 Map2-----");
Map map1 = dao.selectAllMemberMap2();
System.out.println(map1);
System.out.println("-----마일리지 범위 조회List-----");
ArrayList list2 = (ArrayList)dao.selectMemberByMileageRange(1, 2000);
for(int i=0; i<list2.size(); i++) {
MemberDTO mto = (MemberDTO)list2.get(i);
System.out.println(mto);
}
System.out.println("-----마일리지 범위 조회Map -----");
Map map2 = dao.selectMemberByMileageRangeMap(2000, 3000);
Set mapset = map2.keySet();
Iterator itr = mapset.iterator();
while(itr.hasNext()) {
ArrayList list4 = new ArrayList();
Object obj = itr.next();
list4.add(obj);
System.out.println(list4);
}
System.out.println("-----업데이트 처리-----");
mdto3.setPassword("password");
mdto3.setMileage(8000);
int cnt = dao.updateMemberById(mdto3);
System.out.println(cnt + " - " + dao.selectMemberById("a6"));
System.out.println("-----삭제 처리-----");
int count = dao.deleteMemberById("id2");
System.out.println("삭제된 수: " +count);
List list5 = dao.selectAllMemberList();
for(Object obj : list5) {
System.out.println(obj);
}
}
}
'Wanna be a Programmer > ibatis' 카테고리의 다른 글
SqlMapConfig 설정 (0) | 2012.06.26 |
---|---|
ibatis(Mybatis) 개요 및 설치과정 (0) | 2012.06.26 |