환경/Spring

spring5 + mybatis + 외장Tomcat8.5 구축 (feat. eclipse, sts3)

yesman9 2022. 4. 19. 11:12

나중에 내가 보려고 정리


 

1. 마켓플레이스에서 STS3 (Standalone Edition) 설치

  • STS4에는 Spring Legacy 프로젝트가 존재하지 않음
  • 위 경우에는 STS3 add-on을 설치하면 해결가능

2. STS3와 이클립스 버전별로 호환 여부 확인

  • 이클립스 2020-06은 STS3-3.9.14와 호환.

3. Spring Legacy 프로젝트 생성

  • run on server해서 잘 실행되는지 확인

4. server.xml에서 host설정

  • maven빌드로 war파일로 배포 후, server.xml에서 war파일을 실행하도록 <host>수정
<Host name="DomainName.com"
	appBase="D:\workspace\PROJECTNAME" unpackWARs="true"
	autoDeploy="false" xmlValidation="false"
	xmlNamespaceAware="false">
	<Alias>DomainName2.com</Alias>
	<Context path="" docBase="D:\workspace\PROJECTNAME\target\PROJECTNAME-1.0.0-BUILD-SNAPSHOT.war"
	debug="0" reloadable="true" allowLinking="true" />
</Host>

 

5. pom.xml 수정

  • 스프링 버전 5, 자바 버전 1.8로 수정             
<properties>
	<java-version>1.8</java-version>
	<org.springframework-version>5.3.19</org.springframework-version>
	<org.aspectj-version>1.8.10</org.aspectj-version>
	<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
  • pom.xml에서 mybatis추가
<!-- mybatis -->
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
	<version>3.5.9</version>
</dependency>        
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis-spring</artifactId>
	<version>2.0.7</version>
</dependency>
<!-- spring-jdbc -->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-jdbc</artifactId>
	<version>${org.springframework-version}</version>
</dependency>
<! -- commons-dbcp -->
<dependency>
	<groupId>commons-dbcp</groupId>
	<artifactId>commons-dbcp</artifactId>
	<version>1.4</version>
</dependency>
<!-- mysql -->
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>5.1.31</version>
</dependency>

 

6. root-context.xml 수정

  • dataSource에 접속할 DB정보 입력
  • sqlSessionFactory의 mapperLoactions에 Mapper.xml이 위치한 경로 일치시킬 것
  • component-scan의 base-package 경로 일치시킬 것
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
	<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
	<property name="url" value="jdbc:mysql://YOUR IP/YOUR DB NAME"></property>
	<property name="username" value="USERNAME"></property>
	<property name="password" value="PASSWORD"></property>
</bean>
       
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource"></property>
	<!-- mapperLocations  속성 추가 -->
	<property name="mapperLocations" value="classpath*:mybatis/**/*Mapper.xml"></property>
</bean>
       
<!-- SqlSessionTemplate -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
	<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
</bean>
       
<!-- component-scan -->
<context:component-scan base-package="com.sample.mapper">
</context:component-scan>
<mybatis-spring:scan base-package="com.sample.mapper"/>

Trouble Shooting

에러 1)

Multiple annotations found at this line:- cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 
 'context:component-scan'.
  • 상단의 xsi:schemaLocation"http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd" 추가

에러2)

The prefix "mybatis-spring" for element "mybatis-spring:scan" is not bound. 
  • NameSpace에서 mybatis-spring 추가
    • NameSpace가 없으면 파일 우클릭 후 Open With -> Others -> Spring Config Editor -> NameSpace생김
      • Spring Config Editor가 없으면 Spring Tools3 Add-On을 업데이트
        • Spring Tools3 Add-on이 없다면 프로젝트 우클릭 -> Maven -> Update Project
          • 그래도 없다면 Eclipse 2020-06이상 버전으로 업데이트

 

7. src/resources/mybatis 아래에 sampleMapper.xml 생성

  • 실제 SQL이 들어갈 파일
  • namespace를 실제 Mapper.java파일의 경로와 일치시킬 것
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sample.mapper.SampleMapper">
        ~~~
        ~~~
        ~~~
</mapper>

 

8. src/main/java/com/sample/mapper 아래에 SampleMapper.java(Interface) 생성

  • iBatis의 DAO와 같은 인터페이스.
  • 구현체가 필요없이 인터페이스만 있으면 됨.
package com.sample.mapper;

import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface SampleMapper {
           public Collection<HashMap<String, Object>> getSomeThing(HashMap<String, Object> reqParams) throws Exception;
           
           //생략//
}

 

9. Controller, Service, Member, Mapper, xml파일 등 프로그램 작성