환경/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이상 버전으로 업데이트
- Spring Tools3 Add-on이 없다면 프로젝트 우클릭 -> Maven -> Update Project
- Spring Config Editor가 없으면 Spring Tools3 Add-On을 업데이트
- NameSpace가 없으면 파일 우클릭 후 Open With -> Others -> Spring Config Editor -> NameSpace생김
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파일 등 프로그램 작성