ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring MVC 개인프로젝트 - #1 프로로젝트 생성과 마이바티스+오라클 연동
    기타/Spring MVC 2021. 3. 18. 16:39

    위 게시글은 아래 글을 참고해서 만들었습니다

    kuzuro.blogspot.com/2018/04/blog-post_7.html

     

    스프링에 오라클과 마이바티스 연동

    개발자, 웹개발, PC앱개발, Java, C#, HTML/CSS, JavaScript, Spring, ASP, .NET

    kuzuro.blogspot.com

     

     

     

    할 때 마다 연결하는 것에 애를 먹어 한 번 정리하기로 했다 ㅠㅠ

    디비 연결하는 게 아직도 헷갈려서 할 때마다 찾아보는데 할때마다 오류와 만남 ㅋㅋ

     

    1. Spring Legacy Project를 만든다

    (프로젝트 만들고 이름 설정하는 건 쉬우니까 건너 뛰기할 때 마다 연결하는 것에 애를 먹어 한 번 정리하기로 했다 ㅠㅠ

     

    디비 연결하는 게 아직도 헷갈려서 할 때마다 찾아보는데 할때마다 오류와 만남 ㅋㅋ

     

     

     

    1. Spring Legacy Project를 만든다

    (프로젝트 만들고 이름 설정하는 건 쉬우니까 건너 뛰기

     

    2. 자바 버전 1.8로 셋팅

    프로젝트 우클릭 → Properties → Project Facets에서 자바 버전을 1.8로 맞춰주기

    pom.xml 에서도 1.8로 맞춰주기

    안 그러면 maven 업데이트 때마다 버전이 돌아간다

    이걸 몰라서 나는 할 때마다 고쳐줌..ㄷㄷ

     

    3. 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 https://maven.apache.org/maven-v4_0_0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>com.ria0617</groupId>
    	<artifactId>controller</artifactId>
    	<name>ria0617</name>
    	<packaging>war</packaging>
    	<version>1.0.0-BUILD-SNAPSHOT</version>
    	<properties>
    		<java-version>1.8</java-version>
    		<org.springframework-version>4.3.8.RELEASE</org.springframework-version>
    		<org.aspectj-version>1.6.10</org.aspectj-version>
    		<org.slf4j-version>1.6.6</org.slf4j-version>
    		<m2eclipse.wtp.contextRoot>/</m2eclipse.wtp.contextRoot>
    	</properties>
    	
    	<!-- 오라클 JDBC 드라이버를 가져오기 위해 리포지토리를 추가합니다. -->
    	<repositories>
    		<repository>
    			<id>oracle</id>
    			<url>http://maven.jahia.org/maven2</url>
    		</repository>
    	</repositories>
    
    	<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>
    				
    		<!-- 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>
    
    		<!-- 여기 아래부터 추가 된 소스 -->
    		<!-- 스프링에서 JDBC 를 사용하기 위한 라이브러리 입니다. -->
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-jdbc</artifactId>
    			<version>${org.springframework-version}</version>
    		</dependency>
    
    		<!-- 오라클 JDBC 드라이버 -->
    		<dependency>
    			<groupId>com.oracle</groupId>
    			<artifactId>ojdbc6</artifactId>
    			<version>12.1.0.2</version>
    		</dependency>
    
    		<!-- Test -->
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>4.12</version>
    			<scope>test</scope>
    		</dependency>
    	
    		<!-- spring-test -->
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-test</artifactId>
    			<version>${org.springframework-version}</version>
    			<scope>test</scope>
    		</dependency>
    	
    		<!-- log4jdbc-log4j2-jdbc4 -->
    		<dependency>
    			<groupId>org.bgee.log4jdbc-log4j2</groupId>
    			<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
    			<version>1.16</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>
    
    	</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.8</source>
    					<target>1.8</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>
    

     

    4. src/main/resources에 log4jdbc.log4j2.properties파일을 생성

    log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator

     

    5. src/main/webapp/WEB-INF/spring/root-context.xml 파일을 열고

    Namespaces 탭을 선택 후 beans, context, jdbc, mybatis-spring을 체크한다.

    혹시 이클립스에 Namespaces 탭이 안보이는 경우는 

     

    WIndow>Pergerences<Install/Update<Available Software Sites 로 간다음

    ADD 를 누르고 이클립스 공식 홈페이지에서 가장 높은 버젼 ex) 2021-03 을 확인한 후

    Name: 2021-03

    Location: download.eclipse.org/releases/2021-03/

    추가 하고 확인 한 다음 재시작 후 마켓에서 installed에서 sts를 업데이트 해주면 된다.

     

    이 방법을 몰라 수동으로 늘 Namespaces를 썼었다

    물론 최신 버전으로 깔아도 되긴하지만 깔아놓은 설정 날아가는게 싫어서 찾다보니 알게 되었다

     

    그리고 아래 소스를 추가한다

    <?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:context="http://www.springframework.org/schema/context"
    	xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    	xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
    	xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd
    		http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
    		http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
    		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
    	
    	<!-- Root Context: defines shared resources visible to all other web components -->
    	<!-- 오라클 접속 -->
    	<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource">
    		<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy" />
    		<property name="url" value="jdbc:log4jdbc:oracle:thin:@localhost:1521/XE" />
    		<property name="username" value="계정아이디" />
    		<property name="password" value="계정비밀번호" />
    	</bean>
    
    	<!-- Mybatis 연동 -->
    	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    		<property name="dataSource" ref="dataSource" />
    		<property name="configLocation" value="classpath:/mybatis-config.xml" />
    		<property name="mapperLocations" value="classpath:mappers/**/*Mapper.xml" />
    	</bean>
    	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
    		<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
    	</bean>
    	
    </beans>
    

     

    6. src/main/resources에 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>
    
    </configuration>

     

    7. src/main/resources에 mappers 폴더를 생성하고, 그 폴더에 testMapper.xml을 생성한 뒤 아래의 코드를 추가

    <!DOCTYPE mapper
    	PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.test.mappers.testMapper">
    	   
    </mapper>

     

    8. jar 파일을 복사해준다

    오라클이 설치된 경로에서 ojdbc6.jar 파일을 복사한다

    아래 경로에 붙여넣어준다

    사실 왜 넣어줘야 하는지는 공부 부족으로 아직 모르겠다 ㅠㅠ

    C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext
    C:\Program Files\Java\jre1.8.0_171\lib\ext

     

    그리고 여기에도 복사 붙여 넣기

    ojdbc6.jar 우클릭해서 Bulid Path가 나오면 추가해주고 

     

    나오지 않으면 위에서 클릭한 다음 ojdbc6.jar 복사해준 경로에 가서 추가해준다

     

    8. 그리고 Add Library 눌러서 JUnit4도 추가해주기!

    이건 테스트 용으로 필요한 라이브러리이다

     

     

    9. src/test/java → com.test.controller 내부에

    MyTest.java 파일(클래스)를 생성하고 아래의 코드를 추가

    참고로 클래스 이름 test는 피한다 @Test 때문에 같은 이름으로 하면 오류가 나더라 

    package com.ria0617.controller;
    
    import java.sql.Connection;
    
    import javax.inject.Inject;
    import javax.sql.DataSource;
    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations ={"file:src/main/webapp/WEB-INF/spring/**/root-context.xml"})
    public class myTest {
    	
    	//오라클 디비 연결 테스트 
    	@Inject
    	private DataSource ds;
    
    	@Inject
    	private SqlSessionFactory sqlFactory;
    
    	@Test
    	public void test() throws Exception {
    
    		try (Connection conn = ds.getConnection()) {
    			System.out.println(conn);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    
    	@Test
    	public void factoryTest() {
    		System.out.println(sqlFactory);
    
    	}
    
    	@Test
    	public void sessionTest() throws Exception {
    
    		try (SqlSession session = sqlFactory.openSession()) {
    			System.out.println(session);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }

     

    10. 메서드 이름 또는 내부에서 우클릭 → Run As → JUnit을 선택

     

    이렇게 결과가 초록불이면 성공!

    댓글

Designed by Tistory.