package dao.mybatis;


import java.util.List;

import java.util.Map;


import org.apache.ibatis.session.SqlSession;


import pbean.Board;

import utils.MyBatisManager;

import dao.BoardDAO;


public class BoardDAOImpl implements BoardDAO {


public List<Board> getBoardList() {

List<Board> list = null;

SqlSession sqlSession = MyBatisManager.getSqlSession().openSession();

try {

list = sqlSession.selectList("getBoardList");

} catch(Exception e) {

e.printStackTrace();

} finally {

sqlSession.close();

}

return list;

}


public Board getBoard(int num) {

SqlSession sqlSession = MyBatisManager.getSqlSession().openSession();

return sqlSession.selectOne("getBoard", num);

}


public void addArticle(Board board) {

SqlSession sqlSession = MyBatisManager.getSqlSession().openSession();

sqlSession.insert("insertBoard", board);

sqlSession.commit();

}


public void updArticle(Board board) {

SqlSession sqlSession = MyBatisManager.getSqlSession().openSession();

sqlSession.update("updateBoard", board);

sqlSession.commit();

}


public void delArticle(int num) {

SqlSession sqlSession = MyBatisManager.getSqlSession().openSession();

sqlSession.delete("deleteBoard", num);

sqlSession.commit();

}


public List<Board> getBoardList(Map<String, Object> map) {

//SqlSession sqlSession = MyBatisManager.getSqlSession().openSession();

//return sqlSession.selectList("getBoardListPaging", map);

List<Board> list = null;

SqlSession sqlSession = MyBatisManager.getSqlSession().openSession();

try {

list = sqlSession.selectList("getBoardListPaging", map);

} catch(Exception e) {

e.printStackTrace();

} finally {

sqlSession.close();

}

return list;

}


public int getBoardCnt() {

int cnt = 0;

SqlSession sqlSession = MyBatisManager.getSqlSession().openSession();

try {

cnt = sqlSession.selectOne("getBoardCount");

} catch(Exception e) {

e.printStackTrace();

} finally {

sqlSession.close();

}

return cnt;

}


}



'ibatis' 카테고리의 다른 글

[펌] [spring + ibatis연계] 간단셀렉트  (0) 2012.11.08
simple CRUD  (0) 2011.04.29
ibatis simple select java bean class와 연동하기  (0) 2011.04.29
ibatis와 spring연동  (0) 2011.04.29
ibatis simple select  (0) 2011.04.29

번역은 나중에

http://programmingindex.blog134.fc2.com/blog-entry-32.html



=========================================
単一行レコードを返すselect:1
=========================================
.........................................
■test.ibatis.xml
<sqlMap namespace="TestMap">
<select id="selectTest" parameterClass="int" resultClass="java.lang.String">
SELECT
title,
FROM
test_table
WHERE
id=#value#
</select>
</sqlMap>
.........................................
=========================================
単一行レコードを返すselect:2
=========================================
結果をdtoで受け取る。
.........................................
<sqlMap namespace="TestMap">
<typeAlias type="sample.dto.Test" alias="test"/>
<resultMap id="testMap" class="test">
<result property="id" column="id" jdbcType="INTEGER" />
<result property="title" column="title" jdbcType="VARCHAR" />
<result property="content" column="content" jdbcType="VARCHAR" />
</resultMap>

<select id="selectTest" parameterClass="int" resultMap="testMap">
SELECT
id,
title,
content
FROM
test_table
WHERE
id=#value#
</select>
</sqlMap>

.........................................
■javaファイルでの処理
Test test = (Test)getSqlMapClientTemplate().queryForObject("selectTest",1);

=========================================
複数行レコードを返すselect
=========================================
結果をTestのListで受け取る。
.........................................
<sqlMap namespace="TestMap">
<typeAlias type="sample.dto.Test" alias="test"/>
<resultMap id="testMap" class="test">
<result property="id" column="id" jdbcType="INTEGER" />
<result property="title" column="title" jdbcType="VARCHAR" />
<result property="content" column="content" jdbcType="VARCHAR" />
</resultMap>

<select id="selectTestList" resultMap="testMap">
SELECT
id,
title,
content
FROM
test_table
</select>
</sqlMap>
.........................................
■javaファイルでの処理。
List<Test> list = (List<Test>)getSqlMapClientTemplate().queryForList("selectTestList");

'ibatis' 카테고리의 다른 글

SqlSession은 반드시 close해서 파괴해야 한다...  (0) 2015.01.16
simple CRUD  (0) 2011.04.29
ibatis simple select java bean class와 연동하기  (0) 2011.04.29
ibatis와 spring연동  (0) 2011.04.29
ibatis simple select  (0) 2011.04.29

iBatis in Action이란 책도 사고 해서 어느정도 안심이 되지만, 계속 공부를 해서 이번주까지 ibatis 어느정도 마스터 해놓자.


단순하지만 중요한 예제

Sample.xml

프로젝트에서도 경험했지만 xml은 정말로 SQL과 잘 어울린다.다른 어떤 언어보다도


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">

<sqlMap namespace="Sample">
    <select id="getSample" resultClass="test.ibatis.Sample">
        SELECT
            ID as id,
            `DESC` as description
        FROM SAMPLE
        WHERE ID = #value#
    </select>
    <update id="updateSample" parameterClass="test.ibatis.Sample">
        UPDATE SAMPLE SET
            `DESC` = #description#
         WHERE ID = #id#
    </update>
   
    <insert id="insertSample" parameterClass="test.ibatis.Sample">
        INSERT INTO SAMPLE
        VALUES(#id#, #description#)
    </insert>
   
    <delete id="deleteSample" parameterClass="test.ibatis.Sample">
        DELETE FROM SAMPLE
         WHERE ID = #id#
    </delete>
</sqlMap>


import java.io.Reader;

import test.ibatis.Sample;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;


public class IbatisTest {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        Reader reader = Resources.getResourceAsReader("sqlMapConfig.xml");
        SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
       

       
       
        Sample sample = new Sample();
        sample.setId(new Long(5L));
        sample.setDescription("I am just a poor boy");
       
        sqlMap.delete("deleteSample", sample);
    }

}

insert, update도 마찬가지방법으로 하면 된다.

DTO(Data Transfer Object)

자바빈즈


Sample.java


package test.ibatis;

public class Sample {
    private Long id;
    private String description;
   
    /**
     * @return the id
     */
    public Long getId() {
        return id;
    }
    /**
     * @param id the id to set
     */
    public void setId(Long id) {
        this.id = id;
    }
    /**
     * @return the description
     */
    public String getDescription() {
        return description;
    }
    /**
     * @param description the description to set
     */
    public void setDescription(String description) {
        this.description = description;
    }
   
   
}


Sample.xml (SqlMap파일)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">

<sqlMap namespace="Sample">
    <select id="getSample" resultClass="test.ibatis.Sample">
        SELECT
            ID as id,
            `DESC` as description
        FROM SAMPLE
        WHERE ID = #value#
    </select>
</sqlMap>


sqlMapConfig.xml (SqlMapConfig파일)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
 
    <transactionManager type="JDBC">
        <dataSource type="SIMPLE">
            <property name="JDBC.Driver" value="org.gjt.mm.mysql.Driver" />
            <property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost/foods" />
            <property name="JDBC.Username" value="midori" />
            <property name="JDBC.Password" value="midori" />
        </dataSource>
    </transactionManager>

    <sqlMap resource="test/ibatis/test.ibatis.xml" />
    <sqlMap resource="test/ibatis/Sample.xml" />
</sqlMapConfig>


IBatisTest.java(테스트파일)

import java.io.Reader;

import test.ibatis.Sample;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;


public class IbatisTest {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        Reader reader = Resources.getResourceAsReader("sqlMapConfig.xml");
        SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
       

       
        Sample sample = (Sample)sqlMap.queryForObject("getSample", new Long(1L));
        System.out.println(sample.getId());
        System.out.println(sample.getDescription());
    }

}

'ibatis' 카테고리의 다른 글

[펌] [spring + ibatis연계] 간단셀렉트  (0) 2012.11.08
simple CRUD  (0) 2011.04.29
ibatis와 spring연동  (0) 2011.04.29
ibatis simple select  (0) 2011.04.29
Dao를 싱글턴 패턴으로 수정  (0) 2011.04.21

준비파일

spring 2.5나 3.0

jakarta common dbcp

jakarta common logging

(log4j)

ibatis 2.3


작성파일

TestDao.java (DAO)

applicationContext.xml

jdbc.properties

test.ibatis.xml

sqlmapConfig.xml

SpringTest.java

-------------------------------------------------------

☞ TestDao.java


package test.ibatis;

import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;


public class TestDao extends SqlMapClientDaoSupport {
    public String getName(int id) {
        return (String)getSqlMapClientTemplate().queryForObject("selectTest", id);
    }
}


-------------------------------------------------------

☞ applicationContext.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <!-- 프로퍼티 파일 읽어들임 -->
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>jdbc.properties</value>
            </list>
        </property>
    </bean>
   
    <!-- DB접속 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driver}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.user}" />
        <property name="password" value="${jdbc.pass}" />
    </bean>
   
    <!-- Data Access클래스(ibatis와 연동할때 꼭 필요한지??) -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>
    </bean>
   
    <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocation">
            <value>sqlmapConfig.xml</value>
        </property>
    </bean>
   
    <bean id="testDao" class="test.ibatis.TestDao">
        <property name="dataSource" ref="dataSource"/>
        <property name="sqlMapClient" ref="sqlMapClient"/>
    </bean>
</beans>


-------------------------------------------------------

☞ jdbc.properties


jdbc.driver=org.gjt.mm.mysql.Driver
jdbc.url=jdbc:mysql://localhost/foods
jdbc.user=midori
jdbc.pass=midori




-------------------------------------------------------

☞ test.ibatis.xml

ibatis와 같음



-------------------------------------------------------

☞ sqlmapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>

    <sqlMap resource="test/ibatis/test.ibatis.xml" />
</sqlMapConfig>


※ db연결부분은 spring에서 관리


-------------------------------------------------------

☞ SpringTest.java


import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import test.ibatis.TestDao;


public class SpringTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        ApplicationContext appContext =
            new ClassPathXmlApplicationContext("applicationContext.xml");
        TestDao dao = (TestDao)appContext.getBean("testDao");
        String test = dao.getName(1);
        System.out.println("test =" + test);
    }

}

참고 url

http://programmingindex.blog134.fc2.com/


'ibatis' 카테고리의 다른 글

simple CRUD  (0) 2011.04.29
ibatis simple select java bean class와 연동하기  (0) 2011.04.29
ibatis simple select  (0) 2011.04.29
Dao를 싱글턴 패턴으로 수정  (0) 2011.04.21
Dao작성  (0) 2011.04.21

준비파일

ibatis-2.3.4.726.jar


작성파일

test.ibatis.xml

sqlmapConfig.xml

IbatisTest.java


--------------------------------------------------

☞ test.ibatis.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBatis.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">

<sqlMap namespace="TestMap">
    <select id="selectTest" parameterClass="int" resultClass="string">
    SELECT
    name
    FROM
    test_table
    WHERE
    id=#value#
    </select>
</sqlMap>

--------------------------------------------------

☞ sqlmapConfig.xml


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
 
    <transactionManager type="JDBC">
        <dataSource type="SIMPLE">
            <property name="JDBC.Driver" value="org.gjt.mm.mysql.Driver" />
            <property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost/db명" />
            <property name="JDBC.Username" value="db아이디" />
            <property name="JDBC.Password" value="db패스워드" />
        </dataSource>
    </transactionManager>

    <sqlMap resource="test/ibatis/test.ibatis.xml" />
</sqlMapConfig>

--------------------------------------------------

☞ IbatisTest.java


import java.io.Reader;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;


public class IbatisTest {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        Reader reader = Resources.getResourceAsReader("sqlMapConfig.xml");
        SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
       
        String name = null;
        name = (String)sqlMap.queryForObject("selectTest", 2);
        System.out.println("test :: " + name);
    }

}



'ibatis' 카테고리의 다른 글

ibatis simple select java bean class와 연동하기  (0) 2011.04.29
ibatis와 spring연동  (0) 2011.04.29
Dao를 싱글턴 패턴으로 수정  (0) 2011.04.21
Dao작성  (0) 2011.04.21
첫째날 예제  (0) 2011.04.20

독립적인 어플이라면 굳이 이렇게 할 필요를 못느끼지만, 웹환경과 같은 C/S환경에서는 하나의 클래스를 여러 사용자가 공동으로 동시에 사용하므로 성능에서 문제가 생길 수 있습니다.

참고한 사이트: http://kyungseo.pe.kr/blog/55)

 

그래서 TestDao3.java를 다음과 같이 바꿔봤습니다. 소위 싱글톤 패턴이라는 것이죠...

디자인 패턴에 대해서는 틈틈히 공부해 둬야 되겠습니다.

 

public class TestDao3 {
 private SqlSessionFactory sqlSessionFactory;
 private static TestDao3 instance;
 
 private TestDao3() {
  Reader reader;
  try {
   reader = Resources.getResourceAsReader("Configuration.xml");
   sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 
 public static TestDao3 getInstance() {
  if (instance == null) {
   instance = new TestDao3();
  }
  return instance;
 }

 

 

... 이하 동일

 

}

 

이렇게 하면 하나의 어플리케이션내에서 SqlSessionFactory 객체는 오직하나(Single)만 생기고

같은 객체를 참조해서 세션을 작성하게 되어있습니다.

 

그리면 호출하는 메인에서는

//TestDao3 foodDao = new TestDao3();
  TestDao3 foodDao = TestDao3.getInstance();

과 같이 new가 아닌 getInstance라는 메서드만 호출이 가능하며,

싱글턴 패턴으로 성능을 향상시킬 수 있네요.

 

자세한 것은 위의 url을 참조하시며 되겠습니다.

'ibatis' 카테고리의 다른 글

ibatis simple select java bean class와 연동하기  (0) 2011.04.29
ibatis와 spring연동  (0) 2011.04.29
ibatis simple select  (0) 2011.04.29
Dao작성  (0) 2011.04.21
첫째날 예제  (0) 2011.04.20

기존의 spring jdbc로 되어있던 것을 ibatis로 바꿔봤습니다.

 

SqlMapper.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="sample1.FoodMapper">
 <select id="selectAllCount" resultType="int">
  select count(*) from foodslist
 </select>
 
 <select id="selectFood" parameterType="int" resultType="sample1.Food">
  select * from foodslist where id = #{id}
 </select>
 
 <select id="selectFoodList" resultType="sample1.Food">
  select * from foodslist
 </select>
 
 <insert id="insertFood" parameterType="sample1.Food">
  insert into
    foodslist(foodname, maker, category, price)
  values (#{foodname}, #{maker}, #{category}, #{price})
 </insert>
 
 <update id="updateFood" parameterType="sample1.Food">
  update foodslist set
   foodname=#{foodname}, maker=#{maker}, category=#{category}, price=#{price}
   where id=#{id}
 </update>
 
 <delete id="deleteFood" parameterType="int">
  delete from foodslist where id=#{id}
 </delete>
</mapper>

 

FoodMapper.java

package sample1;

import java.util.List;

public interface FoodMapper {
 Food selectFood(int id);
 int selectAllCount();
 List selectFoodList();
 void insertFood(Food food);
 void updateFood(Food food);
 void deleteFood(int id);
}

 

TestDao3.java

package sample1;

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

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 TestDao3 {
 private SqlSessionFactory sqlSessionFactory;
 public TestDao3() {
  Reader reader;
  try {
   reader = Resources.getResourceAsReader("Configuration.xml");
   sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 
 /**
  * 전체 음식목록 리턴
  * @return 음식목록
  */
 public List<Food> getFoodList() {
  SqlSession session = null;
  List<Food> foodList = null;
  try {
   session = sqlSessionFactory.openSession();
   FoodMapper mapper = session.getMapper(FoodMapper.class);
   foodList = mapper.selectFoodList();
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (session != null) {
    session.close();
   }
  }
  
  return foodList;
 }
 
 /**
  * 음식목록을 콘솔에 출력
  */
 public void viewFoodList() {
  List<Food> list = getFoodList();
  
  for (int i=0; i<list.size(); i++) {
   Food food = (Food)list.get(i);
   System.out.println(food.getId() + "," + food.getFoodname() + "," + food.getMaker() +
     "," + food.getCategory() + "," + food.getPrice());
  }
 }
 
 /**
  * 음식이 존재하는지 체크
  * @param foodId 음식id
  * @return true: 존재, false: 존재하지 않음
  */
 public boolean validateFood(int foodId) {
  Food food = getFood(foodId);
  
  if (food == null) {
   return false;
  }
  
  return true;
 }
 
 /**
  * 해당 id의 음식을 리턴
  * @param foodId 음식id
  * @return 특정id의 음식
  */
 public Food getFood(int foodId) {
  SqlSession session = null;
  Food food = null;
  try {
   session = sqlSessionFactory.openSession();
   FoodMapper mapper = session.getMapper(FoodMapper.class);
   food = mapper.selectFood(foodId);
  } catch(Exception e) {
   e.printStackTrace();
  } finally {
   if (session != null) {
    session.close();
   }
  }
  return food;
 }
 
 /**
  * FOODLIST테이블에 자료추가
  * @param food 추가할 음식
  */
 public void insert(Food food) {
  SqlSession session = null;
  try {
   session = sqlSessionFactory.openSession();
   FoodMapper mapper = session.getMapper(FoodMapper.class);
   mapper.insertFood(food);
   session.commit();
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (session != null) {
    session.close();
   }
  }
 }
 
 /**
  * FOODLIST테이블에 자료수정
  * @param food 수정할 음식
  */
 public void update(Food food) {
  SqlSession session = null;
  try {
   session = sqlSessionFactory.openSession();
   FoodMapper mapper = session.getMapper(FoodMapper.class);
   mapper.updateFood(food);
   session.commit();
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (session != null) {
    session.close();
   }
  }
 }
 
 /**
  * FOODLIST테이블에 자료삭제
  * @param food 삭제할 음식
  */
 public void delete(Food food) {
  SqlSession session = null;
  try {
   session = sqlSessionFactory.openSession();
   FoodMapper mapper = session.getMapper(FoodMapper.class);
   mapper.deleteFood(food.getId());
   session.commit();
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (session != null) {
    session.close();
   }
  }
 }
 
}

 

메인샘플은 spring참조

단순히 스프링 관련 코드 지우고 아래처럼 TestDao2 ==> TestDao3로 바꿔주면 됩니다.

//TestDao2 foodDao = (TestDao2)factory.getBean("testDao2");
  TestDao3 foodDao = new TestDao3();

 

이런것이 바로 객체재향 캡슐화의 장점이 아닐까요?

'ibatis' 카테고리의 다른 글

ibatis simple select java bean class와 연동하기  (0) 2011.04.29
ibatis와 spring연동  (0) 2011.04.29
ibatis simple select  (0) 2011.04.29
Dao를 싱글턴 패턴으로 수정  (0) 2011.04.21
첫째날 예제  (0) 2011.04.20

ibatis가 이제 mybatis가 되었네요. 구성파일이 분리가 되고 편리해졌네요.

 먼저 구성파일입니다.

 

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="config.properties"></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="SqlMapper.xml"/>
 </mappers>
</configuration>

 

크게 보면 properties, environments, mappers 3부분으로 나눌수 있네요.

properties는 DB접속 속성정보등을 두는 곳이고

environments는 db접속정보

mappers는 실제sql 맵핑파일이 들어있는 곳입니다.

 

다음은 Sql 맵핑파일

SqlMapper.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="sample1.FoodMapper">
 <select id="selectAllCount" resultType="int">
  select count(*) from foodslist
 </select>
 
 <select id="selectFood" parameterType="int" resultType="sample1.Food">
  select * from foodslist where id = #{id}
 </select>
</mapper>

보시는 것처럼 mapper 루트요소안에 select태그안에 쿼리가 들어있네요.

여기에 실제로 맵핑되는 것은 위의 mapper루트요소의 namespace속성에 있는 인터페이스 FoodMapper입니다.

 

FoodMapper.java

package sample1;

public interface FoodMapper {
 Food selectFood(int id);
 int selectAllCount();
}

보시는 것처럼 select태그와 여기interface의 메서드와 연결되어 있음을 알 수 있습니다.

 

그러면 최종적으로 샘플 프로그램입니다.

MyBatisSample.java

 

package sample1;

import java.io.Reader;

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

 /**
  * @param args
  */
 public static void main(String[] args) {
  
  String resource = "Configuration.xml";
  Reader reader;
  SqlSession session = null;
  
  try {
   reader = Resources.getResourceAsReader(resource);
   SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
   
   Food food = null;
   session = sqlMapper.openSession();
   
   FoodMapper mapper = session.getMapper(FoodMapper.class);
   food = mapper.selectFood(1);
   
   System.out.println(food.getFoodname());
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (session != null) {
    session.close();
   }
  }
 }

}

스프링하고 좀 비슷한 면이 있네요.

하지만 스프링은 db뿐만 아니라 다른 곳에서도 쓸 수 있는데 ibatis/mybatis는 DB맵핑 전용프레임워크라고 보면 되겠습니다.

 

config.properties

 

driver=org.gjt.mm.mysql.Driver
url=jdbc:mysql:///foods?useUnicode=true&characterEncoding=euckr
username=midori
password=midori
 

'ibatis' 카테고리의 다른 글

ibatis simple select java bean class와 연동하기  (0) 2011.04.29
ibatis와 spring연동  (0) 2011.04.29
ibatis simple select  (0) 2011.04.29
Dao를 싱글턴 패턴으로 수정  (0) 2011.04.21
Dao작성  (0) 2011.04.21

+ Recent posts