티스토리 뷰
[MyBatis] 이클립스(Eclipse Juno)로 MyBatis 예제 프로젝트 만들기 (http://emflant.tistory.com/29)
[MyBatis] MySQL 연결하기 - 1. Config XML 설정파일 (http://emflant.tistory.com/30)
앞의 포스팅을 다 따라했다면 이제 실질적 코딩을 해보자.
1. com.mybatis.sample.app 패키지에 클래스를 하나 추가한다 클래스명은 SampleSessionFactory 로 정하자. 안의 소스는 다음과 같이 작성한다.
package com.mybatis.sample.app;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
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 SampleSessionFactory {
public void demo(){
//앞서 정의했던 xml 설정 파일의 위치와 파일명.
String resource = "com/mybatis/sample/sql/mybatis-config.xml";
//따로 properties 파일에 정의해도 되지만 귀찮아서 객체로 직접 생성.
Properties props = new Properties();
props.put("driver" , "com.mysql.jdbc.Driver");
props.put("url" , "jdbc:mysql://localhost/world");
props.put("username" , "아이디 넣으세요.");
props.put("password" , "비밀번호 넣으세요.");
SqlSession session = null;
try {
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory
= new SqlSessionFactoryBuilder().build(inputStream, props);
//false 는 autoCommit 하지 않겠다는 의미.
session = sqlSessionFactory.openSession(false);
} catch (IOException e) {
e.printStackTrace();
return; //에러나면 메소드 종료
}
//쿼리에 필요한 입력값을 셋팅한다.
HashMap<String, String> input = new HashMap<String, String>();
input.put("code", "AIA");
List<HashMap<String, String>> outputs
= session.selectList("SqlSampleMapper.selectSample", input);
System.out.println(outputs.get(0));
session.commit();
session.close();
}
}
우선 MyBatis에서 중심의 역할을 하는 SqlSessionFactory 객체를 만든다. 그 객체로부터 SQL문을 직접 실행 할 수 있는 SqlSession 객체를 받아오고(openSession() 메소드) 그 객체로 Sql 문을 실행해서(selecList 메소드) 결과를 가져오는 아주 간단한 프로그램이다.
신경써야 할 곳은.. 23 라인에 url을 셋팅하는 곳이 있다. 나는 MySQL이 기본으로 제공하는 World 스키마를 사용하려고 그렇게 지정한 것이므로 각자 알아서 스키마 이름을 기입하면 된다. openSession은 auto commit 옵션을 줄 수 있는데 false 는 등록/수정/삭제 쿼리를 실행하더라도 commit 되지 않고 있다가 SqlSession 객체의 commit() 메소드를 실행해야 커밋된다. 위 로직에서는 에러시 롤백처리에 대한 고려는 전혀 없으니 잘 생각해서 구조를 잡으시면 된다.
근데 이곳에는 쿼리를 작성하는 곳이 없다. 어딜까. 바로 Mapper 파일을 따로 만들어야 한다. MyBatis를 가장 좋아하는 이유가 여기서 나온다. 자바 DAO 로 쿼리 짜보시면 알겠지만 " " 로 묶는 작업이 아주 귀찮고, + 로 하지말고 StringBuffer객체로 append 해야 String 객체의 오남용을 줄이니 쿼리가 조금만 길어도 java 소스로 봐서는 무슨쿼리인지 한눈에 들어오기 힘들다. 하지만 xml 파일이니 < > 문자만 조심해서 붙여 넣어 주기만 하면 되고 변수 선언도 #{ }, ${ } 로 쉽게 해서 직관적이니 귀찮은 작업이 많이 줄게 된다.
com.mybatis.sample.sql 패키지 안에 SampleMapper.xml 파일을 새로 생성하고 아래의 내용을 넣는다.
Mapper XML 파일마다 namespace 를 정의해서 사용한다. 이 이름은 위의 java 파일에서 보이는 session.selectList("SqlSampleMapper.selectSample", input); 에서 쓰인다. 그리고 입력 형식과 출력 형식 모두 나는 HashMap 으로 정의해서 사용했다. DTO 객체를 정의해서 해도된다. 작성해야 할 파일은 다 한 거 같다. 마지막으로 확인해야 할 것은 전 포스팅에서 작성했던 mybatis-config.xml 파일에 SampleMapper.xml 파일이 정상적으로 셋팅이 되있는지만 확인하자.
이제 Main 클래스를 만들어서 실행해서 잘나오면 DB와 연결하여 조회하는 것은 이제 성공이다.
사실 여기서는 DB와 연결해서 쿼리문 날리는 게 목적이라 코딩이 초딩 수준이지만, SqlSessionFactory 를 따로 선언해서 SqlSession 객체를 받아다 쓰는 패턴으로 되야 할 것이고, 트랜젝션 commit 및 rollback 처리에 대한 로직을 구성해야 하므로 대폭적인 수정을 해서 사용해야 문제가 없을 듯 하다.
MyBatis 관련글
[MyBatis] 이클립스(Eclipse Juno)로 MyBatis 예제 프로젝트 만들기
- Total
- Today
- Yesterday
- R
- MongoDB
- 셀프개통
- heroku
- 알뜰요금제
- 맥북
- 이클립스
- MyBatis
- github
- python
- ggplot2
- MySQL
- ubuntu
- Oracle
- 자급제폰
- ipTIME
- java
- eclipse
- 마인크래프트
- docker
- Spring
- vagrant
- ggplot
- 아이맥
- 막대그래프
- javascript
- ktm모바일
- 도넛차트
- SVN
- Google Chart Tools
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |