본문 바로가기

MyBatis

MyBatis 설정하기(JSP나 서블릿에서 사용하기)


1. mybatis.org에서 라이브러리 파일을 다운 받는다.

https://github.com/mybatis/mybatis-3/releases


2. DB접속 정보를 담고 있는 파일 작성

파일 이름 : db.properties


driver=oracle.jdbc.driver.OracleDriver

url=jdbc:oracle:thin:@localhost:1521:orcl

username=scott

password=tiger


3.마이바티스 설정 파일작성

파일 이름 : 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>


<!-- DB접속정보 값을 가지고 있는 파일 설정 -->

<properties resource="pack/mybatis/db.properties" />

<!-- 별명 부여 -->

<typeAliases> 

<typeAlias type="pack.business.DataDto" alias="dto"/>

</typeAliases>

<!-- DB접속 정보 셋팅 -->

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

<!-- mapper.xml 파일 설정 -->

<mappers>

<mapper resource="pack/mybatis/DataMapper.xml" />

</mappers>

</configuration>


4. 

Mapper 작성

파일이름은 Configuration.xml 에서 <mappers>에서 설정해준 경로와 파일이름이 동일하면된다.

예제에서는 DataMapper.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="dev">

<select id="selectDataAll" resultType="pack.tableDto" parameterType="String">

select * from table where name=#{name}

</select> 

</mapper>


5.

자바에서 풀링 처리

package pack.mybatis;


import java.io.Reader;

import org.apache.ibatis.io.Resources;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;


public class SqlMapConfig {

private static SqlSessionFactory sqlSession;


static {

String resource = "pack/mybatis/Configuration.xml";


try {

Reader reader = Resources.getResourceAsReader(resource);

sqlSession = new SqlSessionFactoryBuilder().build(reader);

reader.close();

} catch (Exception e) {

System.out.println("SqlMapConfig 오류 : " + e);

}

}


public static SqlSessionFactory getSqlSession() {

return sqlSession;

}

}


6.

Dao 클래스에서 다음처럼 설정


필드 설정

private SqlSessionFactory factory = SqlMapConfig.getSqlSession(); // 마이바티스 셋팅값 불러오기

private SqlSession sqlSession; // mapper에 접근하기 위한 SqlSession


메소드안에서 설정

sqlSession = factory.openSession();  // 세션 열기

ArrayList<DataDto> list = (ArrayList)sqlSession.selectList("selectDataAll");


7.사용

Dao 클래스에서 사용하고 싶은 쿼리가 있는 메소드의 이름을 호출해서 사용하면 끝


========================================================================================================


부가 설명

sqlSession.selectList()

sqlSession.selectOne()

sqlSession.update()

sqlSession.delete()

등 CRUD를 위한 메서드 제공하며

첫번째 인자에는 mapper의 해당 sql문을 가진 요소의 id(ex: <select id="selectData">), 두번째 인자에는 sql문에 들어갈 파라미터를 넣어준다.

ex)

String name="홍길동";

sqlSession.selectList("selectData",name);


mapper에서는 해당 태그안에 resultType으로 결과값을 리턴해주고

reultType이 Dto(객체)라면 컬럼이름과 Dto안의 필드(전역변수)이름이 동일해야하고 셋터가 있어야함.

mapper에서 해당 태그안에 parameterType형식으로 받아서 해당 태그의 sql문에 인자를 적용 시켜준다.

parameterType이 Dto(객체)라면 컬럼이름과 Dto안의 필드(전역변수)이름이 동일해야하고 겟터가 있어야함.


실제로는 겟터와 셋터의 메소드 이름이 컬럼이름으로 작성되야한다.

이해가 안되면 아래의 예제를 보면 이해가 될것이다.


테이블의 컬럼 이름 name --> Dto의 찾아가는 방법 : 컬럼이름 첫자는 대문자로 나머지는 소문자로 바꾼후 앞에 set 붙인 것과 똑같은 이름을 가진 메소드를 찾는다 --> setName()

결과적으로 name 컬럼명은 가진 데이터는 setName()으로 셋팅 되게 마이바티스 설계자들이 설계를 해놓은 것이다.

age 컬럼명은 setAge() 메소드로 데이터를 셋팅하게 만든것이다.


private String name;

public void setName(String name){

this.name=name;

}

위는 일반적인 셋터 모습


private String irum;

public void setName(String name){

irum=name;

}

이렇게 해도 상관없다

하지만 굳이 이렇게 할 이유도 없다.