ㅤㅤㅤ
스프링 프레임웍에서 MyBatis, Oracle 사용하는 방법 본문
Spring4 + MyBatis + Oracle 을 연동해 봅니다. 앞에서 만들었던 샘플 프로젝트 ( "Spring MVC 샘플 프로젝트 버전3 에서 버전 4로 마이그레이션 하기" ) 를 사용합니다.
1. 먼저 설치한 Oracle 데이터베이스에 유저를 추가하고 테스트용 테이블 을 생성합니다. SYSTEM 계정으로 들어가서 다음 명령으로 사용자를 추가합니다. 아이디와 비밀번호는 xeuser 입니다.
GRANT CONNECT, RESOURCE TO xeuser IDENTIFIED BY xeuser;
SQL Developer 에서 명령 실행은 실행하고자 하는 쿼리를 블럭으로 선택한 후 F9 또는 Ctrl+Enter 입니다.
이제 생성된 계정으로 들어가서 테스트용 테이블을 생성합니다.
CREATE TABLE TB_BOARD ( NUM NUMBER(10) NOT NULL, NAME VARCHAR2(20) NOT NULL, TITLE VARCHAR2(100) NOT NULL, CONTENT CLOB NULL, READ_COUNT NUMBER(10) DEFAULT 0 NOT NULL, WRITE_DATE DATE NOT NULL ); ALTER TABLE TB_BOARD ADD CONSTRAINT PK_BOARD PRIMARY KEY (NUM); INSERT INTO TB_BOARD VALUES (1, '홍길동','게시물 작성', '글 내용', 0, SYSDATE); SELECT * FROM TB_BOARD; ALTER TABLE TB_BOARD DROP CONSTRAINT PK_BOARD; DROP TABLE TB_BOARD;
SQL Developer 에서 스크립트 실행은 F5 입니다. 아래의 DROP 명령은 삭제할 때 만 사용합니다.^^
2. pom.xml 파일에 필요한 의존성을 추가합니다. 추가 후 프로젝트에 마우스 오른쪽 키를 클릭하여 Maven -> Update Project 를 실행합니다.
<!-- 오라클 JDBC 드라이버를 가져오기 위해 리포지토리를 추가합니다. -->
<repositories>
<repository>
<id>oracle</id>
<url>http://maven.jahia.org/maven2</url>
</repository>
</repositories>
<!-- 스프링에서 JDBC 를 사용하기 위한 라이브러리 입니다. -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- 컨넥션 풀을 위한 라이브러리 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- 오라클 JDBC 드라이버 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>12.1.0.2</version>
</dependency>
<!-- MyBatis 라이브러리 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
<!-- 마이바티스와 스프링 연동을 위한 라이브러리 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
필요한 라이브러리가 있을 경우 http://serarch.maven.org 등에 들어가서 검색을 해서 찾아서 넣으면 됩니다.
3. root-context.xml 파일에 데이터베이스 연결 설정, MyBatis 설정, Transaction 을 추가 한다. 스프링 루트 컨텍스트 입니다.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"> <!-- 데이터베이스 연결 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:xe" /> <property name="username" value="xeuser"/> <property name="password" value="xeuser"/> </bean> <!-- SqlSession --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- MyBatis 설정 파일의 위치를 지정합니다. --> <property name="configLocation" value="classpath:/mybatis-config.xml" /> <!-- SQL 파일의 위치를 지정합니다. --> <property name="mapperLocations" value="classpath:/sqlmap/*.xml" /> </bean> <!-- SqlSession --> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache"> <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" /> </bean> <!-- 지정된 베이스 패키지에서 DAO(Mapper) 를 검색하여 등록합니다. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.tistory.pentode.service.dao" /> </bean> <!-- 트랜잭션 매니저 bean 을 등록합니다. --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 아노테이션 기반의 트랜잭션을 사용합니다. --> <tx:annotation-driven transaction-manager="transactionManager"/> </beans>
위에서 beans, tx 등의 네임스페이스가 사용되었습니다. 파일 상단에 xmlns 로 지정 되는 부분입니다. 파일 내부에서 사용되는 태그의 네임페이스가 지정되어야 합니다. eclipse 의 에디터로 설정파일을 열면 하단의 네임스페이스 탭에서 필요한 네임스페이스를 선택하여 쉽게 추가할 수 있습니다.
4. 웹 컨텍스트를 설정합니다.
<?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure --> <!-- Enables the Spring MVC @Controller programming model --> <annotation-driven /> <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory --> <resources mapping="/resources/**" location="/resources/" /> <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory --> <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <beans:property name="prefix" value="/WEB-INF/views/" /> <beans:property name="suffix" value=".jsp" /> </beans:bean> <context:component-scan base-package="com.tistory.pentode" /> </beans:beans>
위에서 두개의 컨텍스트를 설정했습니다. Root 컨텍스트와 Web 컨텍스트 입니다. 스프링 컨텍스트는 빈을 관리한다고 생각하면 되겠습니다. Root 가 최상위가 되고 그 하위 컨텍스트로 Web 컨텍스트가 만들어집니다. 웹 컨텍스트는 여러개 만들 수 있습니다. Servlet-Dispatcher 를 여러개 설정하면 됩니다.
같은 레벨의 컨텍스트 사이에서는 상대방의 Bean 에 접근을 할 수가 없지만 상위 컨텍스트의 Bean 에는 접근이 가능합니다. 즉 Root 컨텍스트는 모든 하위 컨텍스트에서 공유가 되는겁니다. 그래서 보통 공통으로 사용할 필요가 있는 데이터베이스 연결, 서비스, DAO 등을 Root 컨텍스트에서 설정하고, 웹 컨텍스트에서만 사용되는 Controller 는 각각의 웹 컨텍스트에서 설정하는 식으로 많이 사용됩니다.
root-context.xml 과 servlet-context.xml 파일에서 보면 각각 <bean/> 태그와 <beans:beans/> 태그가 사용되고 있다는 것을 알 수 있습니다. 둘의 기능적 차이는 없습니다. 완전히 같은 것 입니다. 그런데 표기 방법이 달라지는 것은 디폴트 네임스페이스 때문입니다.
최상위 요소 <beans 바로 뒤에 나오는 xmlns= 로 바로 시작하는 네임스페이스가 디폴트 네임 스페이스 입니다. 디폴트 이외에는 xmlns:beans= 처럼 네임스페이스를 적어야 합니다. 디폴트 네임스페이스는 본문에 태그를 적을때 네임스페이스를 빼고 적어도 됩니다.
<beans xmlns="http://www.springframework.org/schema/beans"
....... />
<!-- 기본 네임스페이스가 beans 이므로 바로 쓸 수 있습니다. -->
<bean ....> </bean>
</beans>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
.... />
<!-- 기본 네임스페이스가 mvc 이므로 bean 앞에 네임스페이스를 적어야 합니다. -->
<beans:bean ...> </beans:bean>
</beans:beans>
5. mybatis-config.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> <!-- 오라클 필드 속성이 READ_COUNT 처럼 언더 스코어가 있을 때 VO 의 readCount 처럼 카멜 케이스로 변환 되게 합니다. --> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> <typeAliases> <typeAlias alias="boardVO" type="com.tistory.pentode.vo.BoardVO"/> </typeAliases> </configuration>
6. Tb_Board_SQL.xml SQL 맵핑 파일을 만듭니다.
<?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"> <!-- 맵핑될 DAO 인터페이스의 Full name 을 줍니다. --> <mapper namespace="com.tistory.pentode.service.dao.BoardDAO"> <!-- id 속성은 DAO 의 메소드와 같아야 한다. 여기의 boardVO 는 mybatis-confg.xml 에 Alias 되어 있습니다. --> <select id="selectBoardList" resultType="boardVO"> SELECT NUM , NAME , TITLE , CONTENT , READ_COUNT , WRITE_DATE FROM TB_BOARD ORDER BY NUM DESC </select> </mapper>
7. VO 클래스를 만듭니다. 일부만 적었습니다. getter/setter 는 이클립스 Source 메뉴에서 Generate Getters and Setters 기능으로 자동으로 만들 수 있습니다. toString() 메소드도 자동으로 추가할 수 있습니다.
package com.tistory.pentode.vo; import java.sql.Date; public class BoardVO { private Integer num; private String name; private String title; private String content; private Integer readCount; private Date writeDate;
8. DAO 인터페이스를 만듭니다.
package com.tistory.pentode.service.dao; import java.util.List; import com.tistory.pentode.vo.BoardVO; public interface BoardDAO { ListselectBoardList() throws Exception; }
9. 서비스 인터페이스를 만듭니다.
package com.tistory.pentode.service; import java.util.List; import com.tistory.pentode.vo.BoardVO; public interface BoardService { ListselectBoardList() throws Exception; }
10. 서비스 구현 클래스를 만듭니다.
package com.tistory.pentode.service.impl; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.tistory.pentode.service.BoardService; import com.tistory.pentode.service.dao.BoardDAO; import com.tistory.pentode.vo.BoardVO; @Service("boardService") public class BoardServiceImpl implements BoardService { @Autowired private BoardDAO boardMapper; @Override @Transactional public ListselectBoardList() throws Exception { return boardMapper.selectBoardList(); } }
11. 컨트롤러에 Request를 추가합니다.
@Resource(name = "boardService") private BoardService boardService; @RequestMapping(value = "/boardList.do") public String boardList(Model model) throws Exception { Listlist = boardService.selectBoardList(); logger.info(list.toString()); model.addAttribute("list", list); return "boardList"; }
12. 뷰페이지를 만듭니다.
<%@ page contentType="text/html; charset=euc-kr" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ page session="false" %> <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-kr"/> <title>Home</title> </head> <h1>Board List</h1> <table border="1"> <thead> <tr> <th>번호</th> <th>이름</th> <th>제목</th> <th>조회</th> <th>작성일</th> </tr> </thead> <tbody> <c:forEach var="item" items="${list}"> <tr> <td>${item.num}</td> <td>${item.name}</td> <td>${item.title}</td> <td>${item.readCount}</td> <td>${item.writeDate}</td> </tr> </c:forEach> </tbody> </table>
13. 결과를 확인해 봅니다.
스프링에 마이바티스 오라클 연동을 해 보았습니다. 이제 간단한 프로그램을 만들기 위한 기본이 어느정도 된것 같습니다.
출처: http://pentode.tistory.com/71 [쉬고 싶은 개발자]
'プログラミング > WebProject' 카테고리의 다른 글
스프링 웹 프로젝트 기본 설정! (0) | 2017.06.21 |
---|---|
마이바티스 오라클 셋팅 참고 자료 (0) | 2017.06.19 |
Spring MVC 프로젝트 버전3 에서 버전 4로 마이그레이션 하는방법 (0) | 2017.06.16 |
Spring Framework을 사용한 웹애플리케이션 개발환경 만들기 (0) | 2017.06.16 |