본문 바로가기

Wanna be a Programmer/ibatis

iBatis 실행 흐름 및 사용 예


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