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를 프로젝트에 추가하여 테스트 해 보세요.
