상세 컨텐츠

본문 제목

STS Spring Mybatis 설정 및 예제

Spring

by husks 2015. 3. 12. 22:33

본문

반응형


STS에서 생성한 프로젝트에 Mybatis를 설정하도록 하겠습니다. (이전작업 http://huskdoll.tistory.com/184 을 하시고 따라하시면 좋습니다.)

아래의 프로젝트 구성을 확인하시면 빨간박스안에 있는 파일들은 새로 생성한 파일이며 파란색 박스는 기존 소스에 Mybaits 설정을 추가해준 파일입니다.

아래 예제를 따라 하실때 아래와 동일한 구조로 해보시기 바랍니다.


작업 순서는 아래와 같습니다.


1. pom.xml 에 라이브러리를 추가 시켜 줍니다. (Mybatis 및 jdbc등 DB에 접근하기 위한 라이브러리 추가)


2. root-context.xml에 Mybatis 설정을 적어 줍니다. (DB설정 정보 및 Mybatis 정보를 가지고 있는 파일 위치 셋팅)


3. jdbc-config.xml 을 생성하고 설정을 적어 줍니다. (DB설정 정보 및 Mybatis 정보 설정)


4. jdbc.properties 을 생성하고 설정을 적어 줍니다. (DB설정 정보파일 생성, url, id, pw 같은 정보를 따로 저장관리)


5. package와 class을 생성하고 내용을 적어 줍니다. (controller, service, dao...등 작성)


6. 테이블 및 데이터 생성 (DB에서 가져올 데이터 생성)


7. 쿼리 xml (쿼리문 작성)


8. jsp 페이지 생성


9. 실행




1. pom.xml 에 라이브러리를 추가 시켜 줍니다.


하단의 pom.xml탭을 클릭하시면 소스 확인 됩니다.


아래 소스를 참고하시어 15-20, 42-96 라인을 추가 시켜 주세요.

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.spring</groupId>
	<artifactId>myapp</artifactId>
	<name>SpringExample</name>
	<packaging>war</packaging>
	<version>1.0.0-BUILD-SNAPSHOT</version>
	<properties>
		<java-version>1.6</java-version>
		<org.springframework-version>3.1.1.RELEASE</org.springframework-version>
		<org.aspectj-version>1.6.10</org.aspectj-version>
		<org.slf4j-version>1.6.6</org.slf4j-version>
		<!-- add dependencies version DB start -->
        <org.springframework.jdbc-version>3.2.5.RELEASE</org.springframework.jdbc-version>
        <org.mybatis-version>3.2.2</org.mybatis-version>
        <org.mybatis.spring-version>1.2.0</org.mybatis.spring-version>
        <org.mysql.connector-version>5.1.27</org.mysql.connector-version>
        <!-- add dependencies version DB end -->
	</properties>
	<dependencies>
		<!-- Spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${org.springframework-version}</version>
			<exclusions>
				<!-- Exclude Commons Logging in favor of SLF4j -->
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				 </exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		
		<!-- add dependencies start -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${org.springframework.jdbc-version}</version>
        </dependency>

        <!-- myBatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${org.mybatis-version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>${org.mybatis.spring-version}</version>
        </dependency>
        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${org.mysql.connector-version}</version>
        </dependency>
        <!-- Mybatis log -->
		<dependency>
		    <groupId>org.lazyluke</groupId>
		    <artifactId>log4jdbc-remix</artifactId>
		    <version>0.2.7</version>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.15</version>
			<exclusions>
				<exclusion>
					<groupId>javax.mail</groupId>
					<artifactId>mail</artifactId>
				</exclusion>
				<exclusion>
					<groupId>javax.jms</groupId>
					<artifactId>jms</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jdmk</groupId>
					<artifactId>jmxtools</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jmx</groupId>
					<artifactId>jmxri</artifactId>
				</exclusion>
			</exclusions>
			<scope>runtime</scope>
		</dependency>
		<!-- add dependencies end -->
				
		<!-- AspectJ -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>${org.aspectj-version}</version>
		</dependency>	
		
		<!-- Logging -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${org.slf4j-version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.15</version>
			<exclusions>
				<exclusion>
					<groupId>javax.mail</groupId>
					<artifactId>mail</artifactId>
				</exclusion>
				<exclusion>
					<groupId>javax.jms</groupId>
					<artifactId>jms</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jdmk</groupId>
					<artifactId>jmxtools</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jmx</groupId>
					<artifactId>jmxri</artifactId>
				</exclusion>
			</exclusions>
			<scope>runtime</scope>
		</dependency>

		<!-- @Inject -->
		<dependency>
			<groupId>javax.inject</groupId>
			<artifactId>javax.inject</artifactId>
			<version>1</version>
		</dependency>
				
		<!-- Servlet -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.1</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
	
		<!-- Test -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.7</version>
			<scope>test</scope>
		</dependency>        
	</dependencies>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <additionalProjectnatures>
                        <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
                    </additionalProjectnatures>
                    <additionalBuildcommands>
                        <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
                    </additionalBuildcommands>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <mainClass>org.test.int1.Main</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>



2. root-context.xml에 Mybatis 설정을 적어 줍니다.


아래 정보를 보시고

xmlns:util="http://www.springframework.org/schema/util"


http://www.springframework.org/schema/util 

        http://www.springframework.org/schema/util/spring-util-3.2.xsd


이부분도 추가해주세요.

root-context.xml
<?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:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/util 
        http://www.springframework.org/schema/util/spring-util-3.2.xsd">
	
	<!-- Root Context: defines shared resources visible to all other web components -->
	
	<util:properties id="jdbc" location="classpath:config/jdbc.properties"/>
	
	<import resource="jdbc-config.xml"/>
		
</beans>


3. jdbc-config.xml 을 생성하고 설정을 적어 줍니다.

만드려는 위치에 우클릭 New >> Other


XML 폴더에서 XML File 선택 (Next)


jdbc-config.xml 로 파일명을 적어주시고 Finish


jdbc-config.xml

<?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:aop="http://www.springframework.org/schema/aop"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:c="http://www.springframework.org/schema/c"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="
			http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
			http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
			http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
			http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

	<!-- MyBatis 맵퍼의 SQL 문장에 대한 파라미터 및 리턴 타입을 담을 클래스를 검색 할 패키지 지정 --> 
    <bean id="sqlSessionFactory"
        class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="mapperLocations" value="classpath:mybatis/sqlmaps/*.xml" />
    </bean>
    
    <bean id="sqlSession"
        class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg  ref="sqlSessionFactory"></constructor-arg>
    </bean>
    
    <bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
        <property name="driverClass" value="#{jdbc['jdbc.driverClass']}"/>
        <property name="url" value="#{jdbc['jdbc.url']}"/>
        <property name="username" value="#{jdbc['jdbc.username']}"/>
        <property name="password" value="#{jdbc['jdbc.password']}"/>
    </bean>
    
</beans>



4. jdbc.properties 을 생성하고 설정을 적어 줍니다.


resources 에서 우클릭 하여 폴더를 만들어 줍니다.


폴더명을 적어 줍니다.


우클릭 하여 파일을 만들어 줍니다.


파일명을 적어줍니다.


DB 접속 정보를 적어주세요.


jdbc.properties

jdbc.driverClass=net.sf.log4jdbc.DriverSpy
jdbc.url=jdbc:log4jdbc:mysql://localhost/db
jdbc.username=user
jdbc.password=aaa


5. package와 class을 생성하고 내용을 적어 줍니다. (제일 상단의 폴더 구조 참고)


패키지를 만드시려는 곳에 우클릭 >> New >> Package 를 선택 하세요.


Name을 적어 줍니다.


만들어진 패키지에 클래스를 만들어 줍니다. New >> Class


Name를 적어줍니다.


패키지와 클래스를 만드는 방식은 위와 같이 생성하시면 됩니다.

제일 상단의 폴더 구조를 확인하시고 동일한 방식으로 만들어 주시면 됩니다.

아래에 기록하는 파일과 소스를 참고하여 생성하여 주시기 바랍니다.


BookController.java

package com.spring.myapp.book.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.spring.myapp.book.service.BookService;

@Controller
public class BookController {
	
	@Autowired
	BookService bookService;
	
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Model model) {
		
		model.addAttribute("books", bookService.getBookList());       
		
		return "/book/book";
	}
	
}


BookService.java

package com.spring.myapp.book.service;

import java.util.List;

import com.spring.myapp.book.model.Book;

public interface BookService {
	
	List<Book> getBookList();

}


BookServiceImpl.java

package com.spring.myapp.book.service.impl;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.spring.myapp.book.dao.BookDao;
import com.spring.myapp.book.model.Book;
import com.spring.myapp.book.service.BookService;

@Service("bookService")
public class BookServiceImpl implements BookService {
	
	@Resource(name="bookDao")
	private BookDao bookDao;

	@Override
	public List<Book> getBookList() {
		return bookDao.getBookList();
	}

}


BookDao.java

package com.spring.myapp.book.dao;

import java.util.List;

import com.spring.myapp.book.model.Book;

public interface BookDao {
	
	List<Book> getBookList();

}


BookDaoImpl.java

package com.spring.myapp.book.dao.impl;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.spring.myapp.book.dao.BookDao;
import com.spring.myapp.book.model.Book;

@Repository("bookDao")
public class BookDaoImpl implements BookDao{
	
	@Autowired
	private SqlSession sqlSession;

	public void setSqlSession(SqlSession sqlSession){
		this.sqlSession = sqlSession;
	}

	@Override
	public List<Book> getBookList() {
		
		return sqlSession.selectList("getBookList");
	}

}


Book.java

package com.spring.myapp.book.model;

public class Book {
	
	private String id;
	private String name;
	private String writer;
	private int price;
	private String genre;
	private String publisher;
	private int cnt;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getWriter() {
		return writer;
	}
	public void setWriter(String writer) {
		this.writer = writer;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
	public String getGenre() {
		return genre;
	}
	public void setGenre(String genre) {
		this.genre = genre;
	}
	public String getPublisher() {
		return publisher;
	}
	public void setPublisher(String publisher) {
		this.publisher = publisher;
	}
	public int getCnt() {
		return cnt;
	}
	public void setCnt(int cnt) {
		this.cnt = cnt;
	}
	
}



6. 테이블 및 데이터 생성

CREATE TABLE BOOKS (
  ID VARCHAR(5) NOT NULL,
  NAME VARCHAR(20) NOT NULL,
  WRITER VARCHAR(20) NOT NULL,
  PRICE DECIMAL(10,2) DEFAULT 0,
  GENRE VARCHAR(20) NOT NULL,
  PUBLISHER VARCHAR(20) NOT NULL,
  CNT DECIMAL(10,0) DEFAULT 0,
  PRIMARY KEY  (ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


INSERT INTO BOOKS(
  ID,
  NAME,
  WRITER,
  PRICE,
  GENRE,
  PUBLISHER
) VALUES (
  'A1',
  '홍길동전',
  '허균',
  300,
  '소설',
  '허균 출판사'
)
 ON DUPLICATE KEY UPDATE
 CNT = CNT+1;
  
 INSERT INTO BOOKS(
  ID,
  NAME,
  WRITER,
  PRICE,
  GENRE,
  PUBLISHER
) VALUES (
  'B1',
  '레미제라블',
  '빅토르 위고',
  900,
  '소설',
  '빅토르 위고 출판사'
)
 ON DUPLICATE KEY UPDATE
 CNT = CNT+1;


7. 쿼리 xml

resource 에서 우클릭 New >> Package 를 눌러 주세요.


패키지 명을 적어주세요.


파일 생성을 해주기 위해 만들어진 패키지에 New >> Other 을 선택 합니다.


XML File 를 선택합니다.


파일명을 적어줍니다.


내용을 적어줍니다.


book.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="com.spring.myapp.book">
	<select id="getBookList" resultType="com.spring.myapp.book.model.Book">
		SELECT
			id,
		    name,
		    writer,
		    price,
		    genre,
		    publisher,
		    cnt
		FROM
			BOOKS
	</select>
</mapper>



8. jsp 페이지 생성


생성하시려는 위치에 New >> Folder를 클릭합니다.


만든 폴더에 우클릭 New >> File을 선택 합니다.


File name 을 적어줍니다.


안에 내용을 적어줍니다.


book.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
	<title>Home</title>
</head>
<body>
<h1>
	book list  
</h1>
<table border="1">
	<tr align="center">
		<td width="100px">아이디</td>
		<td width="100px">책이름</td>
		<td width="100px">글쓴이</td>
		<td width="100px">가격</td>
		<td width="100px">장르</td>
		<td width="200px">출판사</td>
		<td width="200px">수량</td>
	</tr>
<c:forEach var="book" items="${books}">
	<tr align="center">
		<td>${book.id}</td>
		<td>${book.name}</td>
		<td>${book.writer}</td>
		<td>${book.price}</td>
		<td>${book.genre}</td>
		<td>${book.publisher}</td>
		<td>${book.cnt}</td>
	</tr>
</c:forEach>
</table>
</body>
</html>



9. 실행

해당 작업이 완료 되었으면 톰켓을 실행 시키시고 http://localhost:8080/ 을 입력하세요.

아래와 같은 화면이 보인다면 성공 입니다.




반응형

'Spring' 카테고리의 다른 글

Ambiguous handler methods mapped for HTTP  (0) 2015.06.10
스프링 버전 확인  (0) 2015.03.30
net.sf.cglib.beans.BulkBeanException  (0) 2015.03.12
STS에서 Spring MVC Project 생성  (3) 2015.03.09
ibatis 동적쿼리  (0) 2015.03.06

관련글 더보기

댓글 영역