읽은 책 정리/코드로 배우는 스프링 웹 프로젝트

[Spring] MyBatis와 스프링 연동

포포015 2020. 12. 13. 23:38

pom.xml 에 라이브러리 추가

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
<!--mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <!-- mybatis-spring -->
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.2</version>
        </dependency>
 
        <!--spring-tx --><!-- mybatis -->
        <!--자기 버전에 맞춰 주세요 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.0.7.RELEASE</version>
        </dependency>
 
        <!--spring-jdbc --><!-- mybatis -->
            <!--자기 버전에 맞춰 주세요 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.0.7.RELEASE</version>
        </dependency>
cs

root-context.xml 설정추가

1
2
3
4
5
6
7
8
  <!--HikariCP Configration-->
        <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
        <constructor-arg ref="hikariConfig"/>
        </bean>
 
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        </bean>
cs

Mapper 설정 2가지 방법 - xml

 인터페이스 방법이 간단해서 편하지만 길어지면 가독성이 안좋음 

xml은 아래와 같은 패키지에 넣어도 가능하고 src/main/resources 구조에 사용해도 됨

 

xml 설정

1
2
3
4
5
6
7
8
9
10
11
12
13
<?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="org.zerock.mapper.TimeMapper">
    
    <select id="getIme2" resultType="string">
    SELECT SYSDATE FROM DUAL
    </select>
 
</mapper>
 
 
cs

 

 

Mapper 설정 2가지 방법 - 인터페이스

-MyBatis가 동작할때 mapper를 인식할수 있도록 root-context.xml에 추가설정

 'Namespaces' 항목에서 mybatis-spring탭 선택- <mybatis:scan> 태그 이용 

지정된 패키지의 모든 Mybatis 관련 어노테이션을 찾아 처리함.

1
<mybatis-spring:scan base-package="org.zerock.mapper"/> 
cs

sql에 전달되는 파라미터는 jdbc에서와 같이 '?'?로 치환되기 때문에 값을 확인하기 힘듬

sql로그를 제대로 보기위해서는 log4jdbc-log4j2라이브러리를 사용해야함. 

1
2
3
4
5
6
    <!-- https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4 -->
<dependency>
    <groupId>org.bgee.log4jdbc-log4j2</groupId>
    <artifactId>log4jdbc-log4j2-jdbc4</artifactId>
    <version>1.16</version>
</dependency>
cs

라이브러리를 추가후 1)로그 설정 파일을 추가하는 작업과 jdbc연결정보를 수정해야함

src/main/resources 밑에 log4jdbc.log4j2.properties 파일과 내용 추가

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

root-context.xml 수정본

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
31
32
33
34
35
36
37
38
<?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:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
    xsi:schemaLocation="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 id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
        <property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy">
        </property>
        <property name="jdbcUrl" value="jdbc:log4jdbc:oracle:thin:@localhost:1521:XE">
        </property>
        <property name="username" value="web02">
        </property>
        <property name="password" value="1234">
        </property>
    </bean>
    
    <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
      <constructor-arg ref="hikariConfig"></constructor-arg>
    </bean>
 
    <bean id="sqlSessionFactory"
    class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    
    <mybatis-spring:scan base-package="org.zerock.mapper"/>
    
    <context:component-scan base-package="org.zerock.sample"></context:component-scan>
    
        
</beans>
 
cs