티스토리 뷰

1.    SpringMyBatis 연동

-      SpringMyBatis를 연동하기 위해서는 SqlSessionFactory 을 등록시켜야 한다.

-      스프링은 MyBatis와의 연결을 위한 mybatis-spring 라이브러리를 이용해서 연동한다.

 

2.    지금까지 Spring 설정한 것 정리

-      1 ) Eclipse Enterprise : Spring Tool 3 Add-on Plug 설치

-      + Spring 프로젝트 생성시 도움을 준다.

-      + 스프링 설정 등 수행 시, 설정 파일을 미리 생성해 준다.

-      + 빈즈 그래프와 같이 개발시 시각적인 도움을 준다.

-      2 ) Spring 프로젝트 생성 후, 우리가 한 것

-      + [1] pom.xml 파일에 스프링관련 dependency(라이브러리) 추가

-      + AspectJ 2개 라이브러리와 Spring 관련 3개 라이브러리를 추가하였다.

-      + [2] pom.xml 파일에 마이바틱스 라이브러리 2개 추가

-      + 추가된 마이 바틱스 라이브러리는 SQL 처리와 스프링 연동에 필요하다.

-      + [3] Bean 태그로 root-context.xml 파일에 Hikari DataSource 빈 추가

-      + [4] Bean 태그로 root-context.xml 파일에 SqlSessionFactoryBean 빈 추가

-      + 웹 어플리케이션 개발 시 의존성 주입(DI)을 통해서, 스프링 기반으로 MVC 패턴에 맞게 주입 받기 위해서 빈으로 등록한다.


[ 1. Log4j2 파일 설정 - 히카리CP 로그도 찍히게 하기 ] (*)

 

더보기

[ + 코드 보기 ]

<?xml version="1.0" encoding="UTF-8"?>


<Configuration status="WARN">

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %5p --- [%10.50t] %-1.50c{1.}.%-1.20M:%L - %m%n%ex"/>
        </Console>
    </Appenders>

    <Loggers>
        <Logger name="org.zerock.myapp"     level="trace"/>
        <Logger name="org.springframework"     level="info"/>
        <Logger name="com.zaxxer.hikari"        level="trace" />


        <!-- log4jdbc -->
        <logger name="log4jdbc.log4j2" level="info" additivity="false">
            <MarkerFilter marker="LOG4JDBC_JDBC" onMatch="DENY" onMismatch="NEUTRAL"/>
            <appender-ref ref="Console"/>
        </logger>


        <Root level="warn">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>

</Configuration>

[ 2. Spring에 MyBatis를 연동하기 위한 pom.xml 파일 설정 ] (***)

 

더보기

[ + 코드 보기 ]

<?xml version="1.0" encoding="UTF-8"?>
 <!-- 1~2칸 띄우기 -->

<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>org.zerock</groupId>
   <artifactId>chap04</artifactId>
   <version>1.0.0-BUILD-SNAPSHOT</version>

   <!-- 웹에 패키징되는 건 war -->
   <packaging>war</packaging>

   <name>chap04</name>
   <url>http://chap04.example.com</url>
   <description>Spring MVC project - maven</description>


   <!-- 프로젝트 어디서든 가져다 쓸수 있도록 정의 -->
   <properties>
      
      <!-- 자바버전 -->
      <java-version>11</java-version>
      <!-- <java-home>${env.JAVA_HOME}</java-home> -->

      <!-- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <maven.compiler.source>11</maven.compiler.source>
      <maven.compiler.target>11</maven.compiler.target> -->
      
      <!-- 스프링버전 -->
      <org.springframework-version>5.3.21</org.springframework-version>

      <org.aspectj-version>1.9.9.1</org.aspectj-version>
      <org.apache.logging.log4j-version>2.17.2</org.apache.logging.log4j-version>
   </properties>


   <dependencies>

      <!-- =============== Logging =============== -->

      <dependency>
         <groupId>org.apache.logging.log4j</groupId>
         <artifactId>log4j-core</artifactId>
         <version>${org.apache.logging.log4j-version}</version>
      </dependency>

      <!-- For Spring framework, HikariCP, DriverSpy logging -->
      <dependency>
         <groupId>org.apache.logging.log4j</groupId>
         <artifactId>log4j-slf4j-impl</artifactId>
         <version>${org.apache.logging.log4j-version}</version>
      </dependency>


      <!-- ============= Servlet/JSP ============= -->
         
      <dependency>
         <groupId>javax.servlet</groupId>
         <artifactId>javax.servlet-api</artifactId>
         <version>4.0.1</version>
         <scope>provided</scope>
      </dependency>
   
      <dependency>
         <groupId>javax.servlet.jsp</groupId>
         <artifactId>javax.servlet.jsp-api</artifactId>
         <version>2.3.3</version>
         <scope>provided</scope>
      </dependency>

      <dependency>
         <groupId>javax.servlet</groupId>
         <artifactId>jstl</artifactId>
         <version>1.2</version>
      </dependency>


      <!-- =============== AspectJ (스프링할 때 rt, weaver 꼭)=============== -->
            
      <dependency>
         <groupId>org.aspectj</groupId>
         <artifactId>aspectjrt</artifactId> <!-- rt = runtime -->
         <version>${org.aspectj-version}</version>
      </dependency>

      <dependency>
         <groupId>org.aspectj</groupId>
         <artifactId>aspectjweaver</artifactId>
         <version>${org.aspectj-version}</version>
      </dependency>


      <!-- ================ Spring (밑의 2개는 최소한 꼭) =============== -->

      <!-- spring bean container -->
      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-context</artifactId>
         <version>${org.springframework-version}</version>
      </dependency>

      <!-- spring mvc 구동 -->
      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-webmvc</artifactId>
         <version>${org.springframework-version}</version>
      </dependency>

      <!-- spring test -->
      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-test</artifactId>
         <version>${org.springframework-version}</version>
         <scope>test</scope>
      </dependency>


      <!-- =============== JDBC =============== -->

      <dependency>
         <groupId>org.bgee.log4jdbc-log4j2</groupId>
         <artifactId>log4jdbc-log4j2-jdbc4</artifactId>
         <version>1.16</version>
      </dependency>
        
      <dependency>
         <groupId>com.oracle.database.jdbc</groupId>
         <artifactId>ojdbc8-production</artifactId>
         <version>21.5.0.0</version>
      
         <type>pom</type>
      
         <exclusions>
            <exclusion>
               <groupId>com.oracle.database.ha</groupId>
               <artifactId>simplefan</artifactId>
            </exclusion>
      
            <exclusion>
               <groupId>com.oracle.database.ha</groupId>
               <artifactId>ons</artifactId>
            </exclusion>
      
            <exclusion>
               <groupId>com.oracle.database.jdbc</groupId>
               <artifactId>rsi</artifactId>
            </exclusion>
      
            <exclusion>
               <groupId>com.oracle.database.jdbc</groupId>
               <artifactId>ucp</artifactId>
            </exclusion>
      
            <exclusion>
               <groupId>com.oracle.database.xml</groupId>
               <artifactId>xdb</artifactId>
            </exclusion>
      
            <exclusion>
               <groupId>com.oracle.database.xml</groupId>
               <artifactId>xmlparserv2</artifactId>
            </exclusion>
         </exclusions>
      </dependency>


      <!-- =============== Testing (버전 4,5 둘다 쓸줄알아야함)=============== -->

      <dependency>
         <groupId>org.junit.jupiter</groupId>
         <artifactId>junit-jupiter-api</artifactId>
         <version>5.8.2</version>
         <scope>test</scope>
      </dependency>

      <!-- ================ DataSource ================= -->

      <dependency>
         <groupId>com.zaxxer</groupId>
         <artifactId>HikariCP</artifactId>
         <version>5.0.1</version>

         <!-- 이 부분만 뺀다 -->
         <exclusions>
            <exclusion>
               <groupId>org.slf4j</groupId>
               <artifactId>slf4j-api</artifactId>
            </exclusion>
         </exclusions>

      </dependency>

      <!-- ================ MyBatis ================= -->
      <dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.5.10</version>
		</dependency>

      <dependency>
         <groupId>org.mybatis</groupId>
         <artifactId>mybatis-spring</artifactId>
         <version>2.0.7</version>
      </dependency>

    
      <!-- ================ Misc ================= -->

      <dependency>
         <groupId>javax.inject</groupId>
         <artifactId>javax.inject</artifactId>
         <version>1</version>
      </dependency>
   
      <dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
         <version>1.18.24</version>
         <scope>provided</scope>
      </dependency>
           
   </dependencies>


    <build>

      <finalName>/</finalName>

        <plugins>

            <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.3.2</version>
            </plugin>

            <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-eclipse-plugin</artifactId>
            <version>2.10</version>

                <configuration>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>false</downloadJavadocs>
                </configuration>
            </plugin>

            <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-compiler-plugin</artifactId>
               <version>3.10.1</version>

               <configuration>
                  <release>${java-version}</release>
               </configuration>
            </plugin>

        </plugins>

    </build>

</project>

[ 3. root-context.xml에 SqlSessionFactory 빈 등록하기 ] (****)

 

[ + classpath: ]

더보기

[ + 코드 보기 ]

<bean 
      id="hikariDataSource" 
      class="com.zaxxer.hikari.HikariDataSource"
      destroy-method="close">
      <description>HikariCP DataSource</description>

      <!-- 생성자 매개변수가 2개 이상일 때 사용할 수 있는 속성 -->
      <!-- <constructor-arg name="" value="" ref="" index=""/> -->
      
      <constructor-arg ref="hikariConfig"/>
      <!-- ref : 매개변수로 hikariConfig를 사용 -->
   </bean>

   <!-- MyBatis Configuration -->
   <!-- SqlSessionFactory Bean 등록 -->
   <bean 
      id="sqlSessionFactory"
      class="org.mybatis.spring.SqlSessionFactoryBean">

      <property name="dataSource" ref="hikariDataSource" />
      <property name="configLocation" value="classpath:mybatis-config.xml" />
      <!-- classpath:는 resources 객체를 만들어 준다. -->
      <!-- classpath는 path 환경변수에 등록한 순서대로 파일을 찾아준다. -->
      <!-- classpath: = /WEB-INF/classes/..... -->
      <!-- /WEB-INF/classes/..... 아래의 파일들을 확인해 준다. -->
      <!-- 폴더의 자세한 path는 설정의 Deployment Assembly를 확인하면 된다. -->

   </bean>

[ 4. Mybatis-Config.xml 파일 생성 - MyBatis 설정파일 ]

 

더보기

[ + 코드 보기 ]

<?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>

[ 5. pom.xml 파일에 spring-jdbc 추가하기 ] (*)

 

더보기

[ + 코드 보기 ]

<?xml version="1.0" encoding="UTF-8"?>
 <!-- 1~2칸 띄우기 -->

<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>org.zerock</groupId>
   <artifactId>chap04</artifactId>
   <version>1.0.0-BUILD-SNAPSHOT</version>

   <!-- 웹에 패키징되는 건 war -->
   <packaging>war</packaging>

   <name>chap04</name>
   <url>http://chap04.example.com</url>
   <description>Spring MVC project - maven</description>


   <!-- 프로젝트 어디서든 가져다 쓸수 있도록 정의 -->
   <properties>
      
      <!-- 자바버전 -->
      <java-version>11</java-version>
      <!-- <java-home>${env.JAVA_HOME}</java-home> -->

      <!-- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <maven.compiler.source>11</maven.compiler.source>
      <maven.compiler.target>11</maven.compiler.target> -->
      
      <!-- 스프링버전 -->
      <org.springframework-version>5.3.21</org.springframework-version>

      <org.aspectj-version>1.9.9.1</org.aspectj-version>
      <org.apache.logging.log4j-version>2.17.2</org.apache.logging.log4j-version>
   </properties>


   <dependencies>

      <!-- =============== Logging =============== -->

      <dependency>
         <groupId>org.apache.logging.log4j</groupId>
         <artifactId>log4j-core</artifactId>
         <version>${org.apache.logging.log4j-version}</version>
      </dependency>

      <!-- For Spring framework, HikariCP, DriverSpy logging -->
      <dependency>
         <groupId>org.apache.logging.log4j</groupId>
         <artifactId>log4j-slf4j-impl</artifactId>
         <version>${org.apache.logging.log4j-version}</version>
      </dependency>


      <!-- ============= Servlet/JSP ============= -->
         
      <dependency>
         <groupId>javax.servlet</groupId>
         <artifactId>javax.servlet-api</artifactId>
         <version>4.0.1</version>
         <scope>provided</scope>
      </dependency>
   
      <dependency>
         <groupId>javax.servlet.jsp</groupId>
         <artifactId>javax.servlet.jsp-api</artifactId>
         <version>2.3.3</version>
         <scope>provided</scope>
      </dependency>

      <dependency>
         <groupId>javax.servlet</groupId>
         <artifactId>jstl</artifactId>
         <version>1.2</version>
      </dependency>


      <!-- =============== AspectJ (스프링할 때 rt, weaver 꼭)=============== -->
            
      <dependency>
         <groupId>org.aspectj</groupId>
         <artifactId>aspectjrt</artifactId> <!-- rt = runtime -->
         <version>${org.aspectj-version}</version>
      </dependency>

      <dependency>
         <groupId>org.aspectj</groupId>
         <artifactId>aspectjweaver</artifactId>
         <version>${org.aspectj-version}</version>
      </dependency>


      <!-- ================ Spring (밑의 2개는 최소한 꼭) =============== -->

      <!-- spring bean container -->
      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-context</artifactId>
         <version>${org.springframework-version}</version>
      </dependency>

      <!-- spring mvc 구동 -->
      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-webmvc</artifactId>
         <version>${org.springframework-version}</version>
      </dependency>

      <!-- spring test -->
      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-test</artifactId>
         <version>${org.springframework-version}</version>
         <scope>test</scope>
      </dependency>

      <!-- spring-jdbc -->
      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-jdbc</artifactId>
         <version>5.3.21</version>
      </dependency>

      <!-- spring-tx manager -->
      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-tx</artifactId>
         <version>5.3.21</version>
      </dependency>

      <!-- =============== JDBC =============== -->

      <dependency>
         <groupId>org.bgee.log4jdbc-log4j2</groupId>
         <artifactId>log4jdbc-log4j2-jdbc4</artifactId>
         <version>1.16</version>
      </dependency>
        
      <dependency>
         <groupId>com.oracle.database.jdbc</groupId>
         <artifactId>ojdbc8-production</artifactId>
         <version>21.5.0.0</version>
      
         <type>pom</type>
      
         <exclusions>
            <exclusion>
               <groupId>com.oracle.database.ha</groupId>
               <artifactId>simplefan</artifactId>
            </exclusion>
      
            <exclusion>
               <groupId>com.oracle.database.ha</groupId>
               <artifactId>ons</artifactId>
            </exclusion>
      
            <exclusion>
               <groupId>com.oracle.database.jdbc</groupId>
               <artifactId>rsi</artifactId>
            </exclusion>
      
            <exclusion>
               <groupId>com.oracle.database.jdbc</groupId>
               <artifactId>ucp</artifactId>
            </exclusion>
      
            <exclusion>
               <groupId>com.oracle.database.xml</groupId>
               <artifactId>xdb</artifactId>
            </exclusion>
      
            <exclusion>
               <groupId>com.oracle.database.xml</groupId>
               <artifactId>xmlparserv2</artifactId>
            </exclusion>
         </exclusions>
      </dependency>


      <!-- =============== Testing (버전 4,5 둘다 쓸줄알아야함)=============== -->

      <dependency>
         <groupId>org.junit.jupiter</groupId>
         <artifactId>junit-jupiter-api</artifactId>
         <version>5.8.2</version>
         <scope>test</scope>
      </dependency>

      <!-- ================ DataSource ================= -->

      <dependency>
         <groupId>com.zaxxer</groupId>
         <artifactId>HikariCP</artifactId>
         <version>5.0.1</version>

         <!-- 이 부분만 뺀다 -->
         <exclusions>
            <exclusion>
               <groupId>org.slf4j</groupId>
               <artifactId>slf4j-api</artifactId>
            </exclusion>
         </exclusions>

      </dependency>

      <!-- ================ MyBatis ================= -->
      <dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.5.10</version>
		</dependency>

      <dependency>
         <groupId>org.mybatis</groupId>
         <artifactId>mybatis-spring</artifactId>
         <version>2.0.7</version>
      </dependency>

    
      <!-- ================ Misc ================= -->

      <dependency>
         <groupId>javax.inject</groupId>
         <artifactId>javax.inject</artifactId>
         <version>1</version>
      </dependency>
   
      <dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
         <version>1.18.24</version>
         <scope>provided</scope>
      </dependency>
           
   </dependencies>


    <build>

      <finalName>/</finalName>

        <plugins>

            <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.3.2</version>
            </plugin>

            <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-eclipse-plugin</artifactId>
            <version>2.10</version>

                <configuration>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>false</downloadJavadocs>
                </configuration>
            </plugin>

            <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-compiler-plugin</artifactId>
               <version>3.10.1</version>

               <configuration>
                  <release>${java-version}</release>
               </configuration>
            </plugin>

        </plugins>

    </build>

</project>

[ 6. 등록한 SqlSessionFactoryBean이 정상 작동되는지 확인하기 ] (***)

 

더보기

[ + 코드 보기 ]

import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestInstance.Lifecycle;
import org.junit.jupiter.api.TestMethodOrder;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;

import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.extern.log4j.Log4j2;


@Log4j2
@NoArgsConstructor


// JUNIT5 - 테스트 메소드 수행시 Spring FrameWork를 구동시키는 어노테이션
@ExtendWith(SpringExtension.class)
@ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/spring/root-context.xml" })
//file: Spring 프로젝트 폴더를 의미한다. ( chap04를 의미 )
//file:에는 공백이 허용되지 않다.
//spring 폴더 -> root-context가 선택된다.
//와일드 카드도 사용이 가능하다.


@TestInstance(Lifecycle.PER_CLASS)
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class SqlSessionFactoryTests {
	
//	@BeforeAll
//	@BeforeEach
//	@Test
//	@AfterAll
//	@AfterEach
	
	
	// @Autowired
	@Setter(onMethod_= { @Autowired }) // ( 추천 )
	private SqlSessionFactory sqlSessionFactory;
	
	@Test
	void dummyTest() {
		log.trace("\t + dummyTest() invoked.");
	} // dummyTest

} // end class

 

 

728x90
댓글
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
최근에 올라온 글
Total
Today
Yesterday
공지사항