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

2021. 3. 12. 10:13
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="setOrderList" parameterType="String">
		INSERT INTO EX_TABLE SET data = #{data}
	</insert>
</mapper>

 

 

@Mapper

1) MyBatis 3.0부터 지원하는 기능. MyBatis와 같은 ORM(Object Relation Mapping) 프레임워크에서 사용

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

 

728x90

BELATED ARTICLES

more