2013년 5월 13일 월요일

Spring + Mybatis + Restful 환경구축 (2)

자 이제 Mybatis 를 구축해봅시다.

벌써 스프링 구축방법이 생각 안날정도로 날이 많이 지났네요..

Mybatis 를 사용하기 위해선 일단 API가 필요합니다.

헌데 이걸 jar 를 받아서 일일이 추가하느냐. 아니죠

우린 앞서 Maven 을 이용해서 jar들을 추가 했습니다.

마찬가지로 maven 이 제공하는 dependency 를 이용합니다.

pom.xml 을 열어주세요.

image

열어서

image

Dependencies -> Add 눌러줍니다.

image

mybatis 만 치면 아래 검색결과가 나옵니다.

이중 org.mybatis 에 mybatis-spring을 OK!

이후 Ctrl+S 한번 해주시고

Mybatis 를 사용하기 위해서는 SqlMapper 를 설정하기 위해서 몇가지 설정을 해야합니다.

그를 첫번째

일단 Config 와 관련된 파일이 3개정도 되니까 WEB-INF/ 에 config 폴더를 하나 만들께요.

image

위와같이 config.properties , mybatis-config.xml, mybatisMapper.xml 이 필요합니다.

이름은 마음대로 해도되고 경로만 잘 설정해주면되요

이제 각 파일 안의 내용을 보죠

첫번째로 config.properties

image

이게 다에요 이건 어디 쓰는거냐면 저는 mysql 을 사용하는데 이를 연결하기 위한 정보를 담고 있습니다. 빨간 네모 부분이 DB명이고 그외 driverclass는 mysql 에 맞췄습니다. DB가 Oracle 이나 sqlite 면 해당 driverclass 명을 적어주면 되겠죠??
유저명이나 비밀번호는 저는 APMsetup 으로 설치한 Apache + mysql 을 사용하니 기본설정이 저런데 여러분 DB에 맞춰서 적으면 되요

두번째로 mybatis-config.xml

image

별거없지요??

이파일을 만드는 방법은 저는 그냥 xml 생성해서 직접 처음부터 적었습니다.

근데 제가 알기론 mybatiseditor 라는 플러그인이 이클립스에 있는걸로 아니 그걸 설치하면

아마 문서타입 정도까진 알아서 만들어 질겁니당.

여긴 이제 mybatis 의 설정을 담는데 mapper 파일의 경로를 지정합니다.

세번째 mybatisMapper.xml

image

자 먼가 복잡해 보입니닷.

이 블로깅을 보기전에 Mybatis 나 Spring에 관한 책으로 공부하신 분이라면 감이 오시겠지만

이부분은 resultMap type 라고 지정해놓은 CommonCode 에 있는 각각의 변수에 SQL Query 의 결과로 나오는 Row data를 변수와 컬럼을 1:1로 매칭시키는 것입니다.

이렇게 매칭만 해놓으면 쿼리 결과가 이제 객체가 되므로 따로 쿼리문을 ResultSet 에서 객체화 하는 부분을 따로 안해도 됩니다. 감이 오시나요??

resultMap 태그 밑에는 실제 어떤 함수가 이 쿼리를 사용하며 WHERE 조건부에 나오는 동적(?) 값을 #{mainCode} 를 받고 이는 String type이고 이 쿼리는 resultMap 'jebal'과 매칭됩니다. 빨간선으로 표시해 놓았죠?

그럼 mapper namespace는 뭐지요? 할수 있습니다. 저도잘 몰라요 ^^*
C++ 에 namespace같은 개념이겠지요뭐..

자이제 이걸보면 아 CommonCode 클래스와 저 함수가 어떻게 쓰이는지 궁금하다..라고 할수 잇겟죠??

자 가봅시다.

CommonCode.java

image

이게 전부입니다.

컬럼과 1:1매칭되는 각 변수가 있고 이 이름은 mapper에 명시한것과 같은 이름 입니다.

이거에 대한 setter, getter 메소드만 있을뿐 입니다. bean 이라고 할수 있겠네요

자 그럼 selectAll2 라는 함수는 어디서 어떻게 쓰이냐??

image

이 CommonService 라는 클래스는 이제 Restful과 함께 설명되어야 하는데 각설하고 일단 mybatis 부분만 설명 후 다시 설명하겠습니다.

아래 get 함수 부분 보시면 return commonDao.selectAll2(main_code) 라고 볼 수 있습니다.

저 main_code는 이 프로그램 어디서가 아니고 웹페이지 상에서 사용자가 날리는 url 에 data부분을 뜻합니다ㅓ.

http://localhost/greennavi/test 여기까지가 현재 CommonService가 제공하는 Service의 주소입니다. 이후 /test/~~ 의 값들을 이용해서 보여줄 페이지를 만들고 보여주게 되는거죠

이때 ~~ 부분이 main_code 가 됩니다. 만약 main_code 가 111 이라면
http://localhost/greennavi/test/111 이라고 하면 저 get 함수가 요청됩니다.

물론 정확하게 Restful 을 설명하자면 GET 방식으로 요청할때만 입니다.

아..그럼 CommonDao 는 무엇이냐.. 이게 로직부분이라고 생각하면 되겟네요

Service를 저는 웹페이지 상의 어떤 url 을 매칭하기 위한 부분을 하나의 서비스라고 했고
(CommonService 를 저는 /test 의 url 에서 하는 service를 뜻합니다.)

Dao 는 Spring에서 말하는 로직 부분이 되겠습니다.

맞나요? 저 초심자라 틀렸다면 댓글 부탁드려요

image

이 부분이 실제 로직 부분이 되겠습니다.

중요한건 sql을 사용하기 위해선 SqlSessionDaoSupport 라는 class를 상속해야 하고 이를

Spring 을 통해 의존성을 주입한 후에 사용 할 수 있습니다.

보시면 selectAll2 함수의 실제 구현부가 나와있습니다.

getSqlsession() 은 SqlSessionDaoSupport 에서 정의된 함수이고 selectOne 을 통해 하나의 쿼리가 가능합니다. 이때 파라미터로 아까 mapper 에서 설정한 "namespace.함수명" 을 하고 실제 #{main_code} 를 저렇게 mainCode 로 넣어주면 쿼리가 되는 거에요.

그 결과로 하나의 CommonCode 객체가 return 되겟지요??

실제로 저흰 지금 쿼리를 한후 결과값을 건드리지 않고 모두 매핑해서 사용하고 있어서.. 구현부가 따로 할게 없답니다. Spring이 다 지원하니까!! mybatis 니까!! 이게 우리가 이걸 사용하느 이유니까!! 꼭 이걸 위해선 아니지만..뭐 아무튼 쉬워지자나요

아 저 implements 는 제가 Dao를 설계한다고 필요했던거니 없어도 무방합니닷.

일단 이렇게 mybatis 설정이 끝났네요.

Restful은 더욱 간단하니까 달려봅시다.

혹여나 mysql 부분이 필요하시면 댓글 달아드리께요

ps. 위 소스를 다 구현하셔도 아직 실행이 안되실겁니다. applicationContext 를 아직 다 안보여 드렸기 때문에 ^^;; 다음편에 다 공개합니다.

도움되셨다면 피드백을 위한 댓글 부탁드립니다.

댓글 없음:

댓글 쓰기