지난 시간에 JAVA + SPRING + MYBATIS를 연동 하는 것을 배워 보았다. 이번에는 JAVA에서 MYBATIS를 연동 하는 법을 배워보자
우선 MAVEN을 통해서 라이브러리를 받아 보도록 하자. 본인은 mybatis 3.3.0을 활용 하였다.
======================================================================
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
<scope>compile</scope>
</dependency>
======================================================================
Mybatis는 DB 접속 정보를 XML로 따로 빼서 관리 할 수도 있고, 그렇지 않으면 코드 상으로 입력을 할 수도 있다. 근데 서버 정보를 소스에 넣으면 서버 정보가 변경 되게 되면 새로 컴파일을 해야 하는데 관리자가 개발 하고 프로젝트를 빠져 버리게 되면 누가 관리 하겠는가? 그래서 XML로 별도 관리 하는 것을 추천 한다.
파일명을 mybatis-config.xml이라는 빈 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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="org.mariadb.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://www.cdesystem.com/test"/>
<property name="username" value="wcs"/>
<property name="password" value="wcs"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="BMRBTMapper.xml"/>
</mappers>
</configuration>
======================================================================
여기서 보면 mapper resource라고 해서 다른 XML을 참조 하게 된다. 이 부분은 쉽게 이야기 하자면 쿼리를 모아 놓은 XML이라고 생각하자!! 단순히 쿼리만 모아 놓은것이 아니라 VO와 맵핑을 시켜 준다.
그렇다면 이제 mapper를 생성해 보자!
=======================================================================
<?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="kr.laby">
<select id="selectSystemLogs" parameterType="String" resultType="kr.laby.VO.SystemLogs">
SELECT
TYPE,
SYSTEM,
INTERFACE AS IFNAME,
IP,
SERVERDESC,
STATUS,
MESSAGE,
SERVICE_ID,
DEVICE,
REQTIME,
DATASIZE,
FILE1,
FILE2,
CRUSER,
CRTYPE,
CRTIME,
FROMDEVICE,
TIME
FROM SYSTEM_LOGS
</select>
<select id="hlsServerList" parameterType="String" resultType="kr.laby.VO.HLSServerList">
SELECT IP FROM HLS_SERVER_LIST WHERE PURPOSE='HLS_실시간'
</select>
</mapper>
=======================================================================
이렇게 쿼리를 넣어 주시면 되겠다.그러고 나서 그 쿼리에 해당 하는 ResultType을 VO의 패키지명으로 선언을 하게 되면 바로 맵핑이 되어서 자바에서 쓸 수 있다는 사실!!
이제 자바 소스 코드를 확인해 보자
환경 설정 파일을 만들었으니 환경 설정을 불러 봐야 겠죠? InputStream을 활용하여 파일을 읽어 들입니다.
String configFile = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(configFile);
이렇게 하면 DB와 연결할 정보를 주입 하는데 까지는 성공 하신거죠!!
Mybatis의 경우 모든 MyBatis 애플리케이션은 SqlSessionFactory 인스턴스를 사용합니다. SqlSessionFactory 인스턴스는 SqlSessionFactoryBuilder 를 사용하여 만들수 있습니다. 어떻게요? 요로케요
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
이렇게 하면 디비와 세션 까지 맺어지게 됩니다.
그럼 이제 쿼리 문을 날려 봐야 겠죠?
List<?>result = null;
result = sqlSession.selectList(mapper);
이렇게 하면 디비에 연결 해서 값까지 가져 오는데 까지 성공!! 이젠 빼서 쓰시기만 하시면 되요~
소스 정리
String configFile = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(configFile);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
result = sqlSession.selectList(mapper);
inputStream.close();
sqlSession.close();
for (int i=0 ; i<result.size() ; i++)
{
System.out.println(result.get(i).getIP());
}
참~~ 쉽죠? 근데 모르면 어렵더라구요 ㅠ.ㅠ