JSP + MyBatis3 쉽게 적용하기 #1
개인적으로 myBatis는 공식 사이트를 참고하여 공부하는걸 추천한다.
한글로 되어 있으니 보기도 편하게 되어 있다. [MyBatis 공식 홈페이지 바로가기]
그래도 "난 지금당장 mybatis를 사용해야 해. 그것도 jsp에 !!" 하는 분들을 위해 jsp에 mybatis를 사용하는 방법을 설명하겠다.
오늘은 데이터를 가져오는(SELECT) 부분만 설명을 진행하겠다. 이것만 이해해도 myBatis의 나머지 기능을 사용하는데 쉽다.
테스트 환경 : tomcat7 + jsp + mybatis3.1 + mysql5.1 |
오늘 설명하는 샘플의 전체 구조는 다음과 같다.
1. mybatis, mysql jdbc 드라이버 다운
mysql-connector-java-5.1.6.jar
2. 다운받은 라이브러리는 WEB-INF/lib 안에 추가한다.
3. com.test.sqlMap 패키지를 만들고 그 아래 SqlSessionManager.java를 생성한다.
package com.test.sqlMap; import java.io.IOException; import java.io.Reader; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class SqlSessionManager { public static SqlSessionFactory sqlSession; static { String resource = "com/test/sqlMap/Configuration.xml"; Reader reader; try { reader = Resources.getResourceAsReader( resource ); sqlSession = new SqlSessionFactoryBuilder().build( reader ); } catch (IOException e) { e.printStackTrace(); } } public static SqlSessionFactory getSqlSession() { return sqlSession; } }
* 해당 클래스는 myBatis 설정 파일을 읽어 DB 커넥션을 맺은뒤 커넥션 맺은 session을 반환해 준다
4. com.test.sqlMap 패키지 안에 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> <settings> <setting name="cacheEnabled" value="false" /> <setting name="useGeneratedKeys" value="true" /> <setting name="defaultExecutorType" value="REUSE" /> </settings> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/testDB" /> <property name="username" value="test" /> <property name="password" value="test12" /> </dataSource> </environment> </environments> <mappers> <mapper resource="com/test/sqlMap/mapper/test.xml" /> </mappers> </configuration>
* DB 접속정보 및 기타 설정등을 할 수 있는 설정파일이다. Property 정보에는 본인의 DB 정보를 입력해 준다.
5. com.test.sqlMap.mapper 패키지를 만들고 그 안에 test.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="Test"> <select id="getCount" resultType="int"> SELECT count(*) FROM TB_test a </select> <select id="getContents" resultType="hashmap"> SELECT id, name FROM TB_test a WHERE id = 'admin' </select> <select id="getList" resultType="hashmap"> SELECT id, name FROM TB_test a </select> <select id="getCountP" parameterType="hashmap" resultType="int"> SELECT count(*) FROM TB_test a WHERE name = #{name} </select> <select id="getContentsP" parameterType="hashmap" resultType="hashmap"> SELECT id, name FROM TB_test a WHERE id = #{name} and age = #{age} </select> </mapper>
* myBatis를 통해 DB를 다룰때 사용할 파일이다. 실행하고자 할 쿼리 모음이라고 생각하면 편하다.
6. 최상위에 index.jsp 파일을 만든다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@page import="com.test.sqlMap.SqlSessionManager"%> <%@page import="org.apache.ibatis.session.SqlSessionFactory"%> <%@page import="org.apache.ibatis.session.SqlSession"%> <%@page import="java.util.*"%> <% SqlSessionFactory sqlSessionFactory = SqlSessionManager.getSqlSession(); SqlSession sqlSession = sqlSessionFactory.openSession(); try{ // 단일 값 가져오기 int cnt = sqlSession.selectOne("Test.getCount") ; // 단일행 가져오기 HashMap hm = sqlSession.selectOne("Test.getConents") ; // 리스트 가져오기 List list = sqlSession.selectList("Test.getList") ; // 가져온 리스트 사용하기 if(list.size() > 0){ for(int i=0; i < list.size(); i++){ HashMap rs = (HashMap)list.get(i) ; } } // String parameter 넘겨서 단일 값 가져오기 String name = "홍길동" ; int pCnt = sqlSession.selectOne("Test.getCountP", name) ; // HashMap parameter 넘겨서 단일 행 가져오기 HashMap pHm = new HashMap(); pHm.put("name", "홍길동") ; pHm.put("age", "28") ; HashMap pRs = sqlSession.selectOne("Test.getConentsP", pHm) ; }catch(Exception e){ e.printStackTrace() ; }finally{ sqlSession.close() ; } %>
[간략설명]
SELECT (index.jsp)
selectOne |
단일 행 또는 단일 값을 가져올때 사용 |
selectList |
리스트로 되어 있는 항목을 가져올때 사용 |
Mapper (test.xml)
namespace |
매퍼 이름 - sqlSession.selectOne("Test.getConentsP", pHm) ; |
id |
호출할 ID 이름 - sqlSession.selectOne("Test.getConentsP", pHm) ; |
resultType |
데이터 반환 형식 - int, string, hashmap |
parameterType |
사용할 인자값 형식 - int, string, hashmap |