티스토리 뷰
[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
- Oracle
- MongoDB
- 이클립스
- 맥북
- python
- java
- ubuntu
- 자급제폰
- ggplot2
- 마인크래프트
- 아이맥
- ipTIME
- 도넛차트
- MySQL
- SVN
- 알뜰요금제
- Google Chart Tools
- 셀프개통
- ggplot
- ktm모바일
- MyBatis
- javascript
- eclipse
- R
- vagrant
- github
- 막대그래프
- heroku
- docker
- Spring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |