Last Modified : 2011.10.27

명함관리(MyBatis)

명함을 관리하는 프로그램을 MyBatis를 이용하는 것으로 수정합니다.
먼저 이클립스에서 새로운 자바 프로젝트를 만듭니다.
다음으로 명함관리에서 쓰였던 Namecard.java, NamecardManager.java, Test.java를 프로젝트에 추가합니다.
(이중 NamecardManager.java 만 수정이 필요합니다)
예제를 실행되려면 외부 라이브러리로 ojdbc14.jar 는 물론 mybatis-3.0.6.jar 를 추가해야 합니다.
http://www.mybatis.org/java.html 방문해서 Download the Persistence Framework 를 클릭하여 다운로드합니다.
다운로드된 파일을 풀면 서브 디렉토리에서 mybatis-3.0.6.jar 파일을 찾을 수 있습니다.
예제를 단순하게 하기 위해서 아래 모든 파일을 net.java_school.namecard 팩키지에 만듭니다.
(NamecardMapper.java 와 NamecardMapper.xml 은 반드시 같은 팩키지에 있어야 합니다)

db.properties

driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
username=scott
password=tiger

Configuration.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration 
	PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
	"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
	<properties resource="net/java_school/namecard/db.properties" />
	
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${driver}" />
				<property name="url" value="${url}" />
				<property name="username" value="${username}" />
				<property name="password" value="${password}" />
			</dataSource>
		</environment>
	</environments>
	
	<mappers>
		<mapper resource="net/java_school/namecard/NamecardMapper.xml" />
	</mappers>

</configuration>

NamecardMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="net.java_school.namecard.NamecardMapper">

   <select id="getCards" resultType="net.java_school.namecard.Namecard">
    select 
    	no, name, mobile, email, to_char(mdate, 'YYYY/MM/DD') mdate 
    from namecards 
    order by no
  </select>
  
  <select id="getCard" parameterType="int" resultType="net.java_school.namecard.Namecard">
    select 
    	no, name, mobile, email, to_char(mdate, 'YYYY/MM/DD') mdate 
    from namecards 
    where no = #{no}
  </select>

  <select id="findCard" parameterType="string" resultType="net.java_school.namecard.Namecard">
    select 
    	no, name, mobile, email, to_char(mdate, 'YYYY/MM/DD') mdate 
    from namecards 
    where name = #{name}
  </select>
  
  <insert id="addCard" parameterType="net.java_school.namecard.Namecard">
  	insert into namecards (no, name, mobile, email, mdate) 
  	values (seq_namecards_no.nextval, #{name}, #{mobile}, #{email}, to_date(#{mdate}, 'YYYY/MM/DD'))
  </insert>
  
 <update id="updateCard" parameterType="net.java_school.namecard.Namecard">
  	update namecards 
  	<set>
  		<if test="name != null">name = #{name},</if>
  		<if test="mobile != null">mobile = #{mobile},</if>
  		<if test="email != null">email = #{email},</if>
  		<if test="mdate != null">mdate = to_date(#{mdate}, 'YYYY/MM/DD')</if>
  	</set>
  	where no = #{no}
  </update>
  
  <delete id="deleteCard" parameterType="int">
  	delete from namecards where no = #{no}
  </delete>

</mapper>

NamecardMapper.java

package net.java_school.namecard;

import java.util.ArrayList;

public interface NamecardMapper {
	
	public ArrayList<Namecard> selectAllNamecards();
	
	public Namecard selectNamecard(int no);
	
	public ArrayList<Namecard> findNamecardWithName(String name);
	
	public void addCard(Namecard card);
	
	public void deleteCard(int no);
	
	public void updateCard(Namecard card);
	
	public Namecard getCard(int no);
	
	public ArrayList<Namecard> findCard(String name);
	
	public ArrayList<Namecard> getCards();
	
}

NamecardManager.java

package net.java_school.namecard;

import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class NamecardManager {
	private String resource = "net/java_school/namecard/Configuration.xml";
	private Reader reader;
	private SqlSessionFactory sqlMapper;

	public NamecardManager() {
		try {
			reader = Resources.getResourceAsReader(resource);
			sqlMapper = new SqlSessionFactoryBuilder().build(reader);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void addCard(Namecard card) {
		SqlSession session = sqlMapper.openSession();
		try {
			NamecardMapper mapper = session.getMapper(NamecardMapper.class);
			mapper.addCard(card);
			session.commit();
		} finally {
			session.close();
		}
	}
		
	public void deleteCard(int no) {
		SqlSession session = sqlMapper.openSession();
		try {
			NamecardMapper mapper = session.getMapper(NamecardMapper.class);
			mapper.deleteCard(no);
			session.commit();
		} finally {
			session.close();
		}
	}
	
	public Namecard getCard(int no) {
		Namecard card = null;
		SqlSession session = sqlMapper.openSession();
		try {
			NamecardMapper mapper = session.getMapper(NamecardMapper.class);
			card = mapper.getCard(no);
		} finally {
			session.close();
		}
		
		return card;
	}
	
	public ArrayList<Namecard> findCard(String name) {
		ArrayList<Namecard> searchCards = new ArrayList<Namecard>();
		SqlSession session = sqlMapper.openSession();
		try {
			NamecardMapper mapper = session.getMapper(NamecardMapper.class);
			searchCards = mapper.findCard(name);
		} finally {
			session.close();
		}
		
		return searchCards;
	}

	public ArrayList<Namecard> getCards() {
		ArrayList<Namecard> cards = new ArrayList<Namecard>();
		SqlSession session = sqlMapper.openSession();
		try {
			NamecardMapper mapper = session.getMapper(NamecardMapper.class);
			cards = mapper.getCards();
		} finally {
			session.close();
		}
		
		return cards;
	}
	
	public void updateCard(Namecard card) {
		SqlSession session = sqlMapper.openSession();
		try {
			NamecardMapper mapper = session.getMapper(NamecardMapper.class);
			mapper.updateCard(card);
			session.commit();
		} finally {
			session.close();
		}
	}

}

Namecard.java, NamecardUI.java는 변경할 내용이 없습니다.
테스트용으로 쓰였던 Test.java 역시 변경없이 테스트 할 수 있습니다.
자바기초 예제로 쓰였던 NamecardUI.java를 지금의 예제에 맞게 변경했습니다. NamecardUI.java
위 링크를 이용해서 NamecardUI.java를 프로젝트에 추가하여 테스트 해 보세요.

참고문서

MyBatis3 사용자 가이드(한국어)