MyBatis는 개발자의 부담이 적고, 생상선 향상에 도움이 된다고 한다. 원래 JDBC를 이용해서 프로그램 소스 안에서 복잡하게 SQL문을 작성하는 방식이다. JDBC로 된 프로젝트를 본 적 있는데 진짜 복잡해서 한눈에 보기 힘들었다. JDBC는 SQL을 수정해야 할 경우 프로그램을 수정해야 하기 때문에 유연성 또한 좋지 못하다. 마이바티스는 SQL을 xml에서 작성하기때문에 SQL 수정이 자유롭고 가독성 또한 좋다.
1) pom.xml
Mybatis 라이브러리를 추가한다.
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 | <!-- MyBatis --> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-jdbc</artifactid> <version>${org.springframework-version}</version> </dependency> <dependency> <groupid>org.mybatis</groupid> <artifactid>mybatis</artifactid> <version>3.2.8</version> </dependency> <dependency> <groupid>org.mybatis</groupid> <artifactid>mybatis-spring</artifactid> <version>1.2.2</version> </dependency> <!-- MySQL --> <dependency> <groupid>mysql</groupid> <artifactid>mysql-connector-java</artifactid> <version>5.1.35</version> </dependency> <!-- log4j-remix --> <dependency> <groupid>org.lazyluke</groupid> <artifactid>log4jdbc-remix</artifactid> <version>0.2.7</version> </dependency> | cs |
마이바티스 라이브러리와 MySQL connector 라이브러리, log4j-remix라이브러리를 추가한다.
2) src/main/resources/spring
context-datasource.xml 추가
context-mapper.xml 추가
web.xml 설정파일에 context-*.xml 로 context설정파일들을 모두 불러올 수 있게끔 해놨다. 파일 그림의 오른쪽 상단에 S표시가 뜨면 Spring 으로 등록이 된 것이다. 만약 뜨지 않는다면, 프로젝트의 properties에서 spring에서 추가해주던가, 자동으로 읽게 해주면 된다.
3) context-datasource.xml - MySQL 연결
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="dataSourceSpied" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://주소:포트명/스키마명"/> <property name="username" value="아이디"/> <property name="password" value="비밀번호"/> </bean> <bean id="dataSource" class="net.sf.log4jdbc.Log4jdbcProxyDataSource"> <constructor-arg ref="dataSourceSpied" /> <property name="logFormatter"> <bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter"> <property name="loggingType" value="MULTI_LINE" /> <property name="sqlPrefix" value="[ SQL ] : "/> </bean> </property> </bean> </beans> | cs |
- 6행 : 기존에는 dataSource인데 dataSourceSpied로 변경한다. 11~19행에서 가로채서 쿼리를 정렬해주기 위해서이다.
- 8행 : 개인PC로 연결할 경우 localhost/스키마명 또는 127.0.0.1/스키마명 으로 해주면 된다.
- 9행 : mysql 연결할때 아이디이다. 보통 root
- 10행 : mysql에서 사용하는 비밀번호이다.
- 13행~21행 : 6행의 dataSourceSpied를 가로채서 새로운 dataSource가 쿼리를 정렬해준다.
4) context-mapper.xml - Spring 연결
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="mapperLocations" value="classpath:/mapper/**/*_sql.xml" /> </bean> <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSession"/> </bean> </beans> | cs |
- 7행 : name의 dataSources는 sqlSession Bean 에서 사용할 이름이고, ref의 dataSource는 context-datasource.xml에 정의한 Bean을 참조하는 것이다.
- 8행 : SQL문을 편집할 수 있는 xml을 모아두는 폴더이다. 중간에 **를 해준 것은 유연한 폴더구조의 변경을 위해서 이다. mapper 폴더 밑에 폴더들 안에 있는 _sql.xml 을 모두 읽는다.
- 11행 : 마이바티스 스프링 연동모듈의 핵심부분이다. sqlSessionTemplate는 sqlSession을 구현하고 코드에서 sqlSession을 대체하는 역할을 한다.
5) log4j.xml 수정
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <!-- Appenders --> <appender name="console" class="org.apache.log4j.ConsoleAppender"> <param name="Target" value="System.out" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %5p [%c] %m%n" /> </layout> </appender> <!-- *추가* --> <appender name="console-infolog" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %5p %m%n"/> </layout> </appender> <!-- --> <!-- Application Loggers --> <logger name="tody" additivity="false"> <level value="debug" /> <appender-ref ref="console"/> </logger> <!-- *추가* --> <!-- Query Loggers --> <logger name="jdbc.sqlonly" additivity="false"> <level value="info"/> <appender-ref ref="console-infolog"/> </logger> <logger name="jdbc.resultsettable" additivity="false"> <level value="info"/> <appender-ref ref="console"/> </logger> <!-- --> <!-- 3rdparty Loggers --> <logger name="org.springframework.core"> <level value="info" /> </logger> <logger name="org.springframework.beans"> <level value="info" /> </logger> <logger name="org.springframework.context"> <level value="info" /> </logger> <logger name="org.springframework.web"> <level value="info" /> </logger> <!-- Root Logger --> <root> <priority value="off" /> <appender-ref ref="console" /> </root> </log4j:configuration> | cs |
- 29행 : 쿼리를 출력하는 Logger를 추가한다.
- 34행 : 쿼리의 결과를 출력하는 Logger를 추가한다.
6) mapper 폴더 생성
이곳에 SQL문을 작성할 xml들을 저장할 것이다.
7) src/main/java에 tody.lovely.common.dao 생성
8) AbstactDAO.java 생성
context-mapper.xml에서 선언한 sqlSessionTemplate를 사용할 DAO를 만들 것이다. 개발할 때 조금 더 편하게 로그를 남기기위해 insert, delete, update, select 메서드들을 재정의 하여 각 비즈니스 로직을 담당할 DAO를 생성하여 지금 만들 DAO를 상속할 것이다. 지금 만들 DAO는 Factory 패턴화 시킨 것으로 비즈니스 로직을 모듈화 한 것이다. Factory 패턴화에 대해 공부하는 것도 좋다.
AbstactDAO.java
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | package tody.lovely.common.dao; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.mybatis.spring.SqlSessionTemplate; import org.springframework.beans.factory.annotation.Autowired; public class AbstractDAO { protected Log log = LogFactory.getLog(AbstractDAO.class); @Autowired private SqlSessionTemplate sqlSession; protected void printQueryId(String queryId) { if(log.isDebugEnabled()){ log.debug("\t QueryId \t: " + queryId); } } public Object insert(String queryId, Object params){ printQueryId(queryId); return sqlSession.insert(queryId, params); } public Object update(String queryId, Object params){ printQueryId(queryId); return sqlSession.update(queryId, params); } public Object delete(String queryId, Object params){ printQueryId(queryId); return sqlSession.delete(queryId, params); } public Object selectOne(String queryId){ printQueryId(queryId); return sqlSession.selectOne(queryId); } public Object selectOne(String queryId, Object params){ printQueryId(queryId); return sqlSession.selectOne(queryId, params); } @SuppressWarnings("rawtypes") public List selectList(String queryId){ printQueryId(queryId); return sqlSession.selectList(queryId); } @SuppressWarnings("rawtypes") public List selectList(String queryId, Object params){ printQueryId(queryId); return sqlSession.selectList(queryId,params); } } | cs |
- 15행 : SqlSessionTemplate를 선언하고 Autowired Annotaion을 통해서 xml에 선언했던 의존관계를 자동으로 주입한다.
** 만들지 않아도 된다. DAO에서 쓸 기능들을 모아둔 것이기 때문이다. AbstractDAO를 만들지 않아도 DAO에서 직접 이 기능들을 쓰면 된다.
9) 서버 실행
오류없이 돌아가면 정상적으로 연동이 된것이다.
도움을 준 블로그 : http://addio3305.tistory.com
'공부 > Spring' 카테고리의 다른 글
스프링(Spring) 개발 - Hibernate를 이용한 회원가입하기 (7) | 2018.05.10 |
---|---|
스프링(Spring) 개발 - Validator를 이용한 회원가입 만들기 (50) | 2018.05.09 |
스프링(Spring) 설정 - 인터셉터(Interceptor) 설정 (60) | 2018.04.26 |
스프링(Spring) 설정 - Log4j 설정 (3) | 2018.04.26 |
스프링(Spring) 설정 - 프로젝트 구조 변경 및 설정 (15) | 2018.04.23 |