[BE/Spring] @Repository 와 @Mapper 비교하기

    728x90
    반응형

    2021.03.12 최초작성

    2023.04.17 수정

     

     

    @Repository

    1) DAO(Data Access Object)나 Repository Bean을 나타내는 데 사용

    2) @Repository 어노테이션을 사용하면 해당 클래스가 DB와 상호작용하는 클래스임을 나타낼 수 있음

    3) 해당 클래스를 스프링 빈으로 등록하면 해당 클래스에서 제공하는 DB 연동 기능을 스프링에서 관리할 수 있음

    4) root-context.xml에 SqlSessionFactory와 SqlSessionTemplate 빈 객체 주입 및 데이터소스 설정

     

    root-context.xml

    <?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 http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd">
        <!-- Root Context: defines shared resources visible to all other web components -->
        
        <bean id="dataSource"
    		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    		<property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
    		<property name="url" value="jdbc:mysql://localhost:3306/erp?serverTimezone=UTC" />
    		<property name="username" value="admin" />
    		<property name="password" value="admin" />
    	</bean>
    	
    	<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:sqlMappers/**/*Mapper.xml"/>
    	</bean>
        
        <!-- SqlSession 객체 주입 -->
        <!-- sqlSession은 sqlSessionFactory를 참조 -->
        <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
            <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
        </bean>
     
    </beans>

     

    @Repository 샘플코드

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Repository;
    
    @Repository
    public class ExampleDaoImpl {
        @Autowired
        SqlSession sqlSession;
    
        public void insertData(String data) {
        	sqlSession.insert("example.insertData", data);
        }
    }

     

    MyBatis Mapper 샘플코드

    <?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="example">
    	<insert id="insertData" parameterType="String">
    		INSERT INTO EX_TABLE SET data = #{data}
    	</insert>
    </mapper>

     

     

    @Mapper

    1) MyBatis 3.0부터 지원하는 기능

    2) @Mapper 어노테이션을 선언한 interface를 생성하면 따로 implements(구현) 생략

    3) @Mapper 어노테이션에 생성한 API의 이름과 MyBatis Mapper에 작성한 Sql ID는 반드시 일치해야 함

    4) MyBatis Mapper의 namespace는 인터페이스의 풀패키지 경로를 입력

     

    @Mapper 샘플코드

    import org.apache.ibatis.anntations.Mapper;
    
    @Mapper
    public class ExampleMapper {
    
        @Override
        public void insertData(String data);
    }

     

    MyBatis Mapper 샘플코드

    <?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="com.example.ex.mapper.ExampleMapper">
    	<insert id="insertData" parameterType="String">
    		INSERT INTO EX_TABLE SET data = #{data}
    	</insert>
    </mapper>

     

    728x90
    반응형

    댓글