기록/BACKEND

[Spring] MyBatis 설정(feat.Spring)

5월._. 2022. 4. 26.
728x90

[이 글]과 달라진 점만 체크한다.

1. pom.xml

mybatis, mybatis-spring, spring-jdbc, spring-tx를 사용한다.

tx는 트랜잭션 처리를 위해서 추가한 것이다.

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
	<version>3.5.9</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis-spring</artifactId>
	<version>2.0.7</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-tx</artifactId>
	<version>5.3.18</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-jdbc</artifactId>
	<version>5.3.18</version>
</dependency>

 

2. root-context.xml

1.  다음을 추가한다. 여기서 ds는 DataSource의 id다.

2.  typeAliase를 하나하나 설정하려면 주석된 곳을 풀고 mybatis-config.xml을 남겨서 그 파일에 작성하면 된다. typeAliasesPackage로 한꺼번에 설정하면 그 파일이 아예 없어도 된다. 

3.  sqlSession을 얻어올 때 생성자에 sqlSessionFactoryBean을 같이 넣는다.

4.  transaction처리를 위해서 transaction-manager도 설정한다.

★★ mapperLocations로 mapper.xml과 자동 매핑하기때문에 꼭 테스트하기 전에 각 mapper.xml파일에 올바른 namespace를 작성해야한다. 그렇지 않으면 sqlSession부터 제대로 만들어지지않는다.

<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="ds" />
	<property name="mapperLocations" value="classpath:mapper/*.xml" />
	<!-- <property name="configLocation" value="classpath:mybatis-config.xml"/> -->
	<property name="typeAliasesPackage" value="com.___.____.model" />
</bean>

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
	<constructor-arg ref="sqlSessionFactoryBean" />
</bean>

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="ds" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>

 

3. interface Mapper.java

인터페이스만 구현한다. 대신 이 인터페이스의 메서드명과 mapper.xml의 sql id가 동일해야한다.

public interface MemberMapper {
	int idCheck(String id) throws Exception;
	void registerMember(MemberDto memberDto) throws Exception;
	MemberDto login(Map<String, String> map) throws Exception;
}

 

4. Service.java

1.  Autowired된 SqlSession을 이용한다.

2.  sqlSession에서 직접 insert나 select 등을 부르지 않는다. getMapper를 이용한다. 인자값은 위의 Mapper interface다. 그 인터페이스의 메서드를 호출하면 자동으로 mapper.xml의 sql이 실행된다.

@Service
public class MemberServiceImpl implements MemberService {
	
	@Autowired
	private SqlSession sqlSession;
	
	@Override
	public int idCheck(String id) throws Exception {
		return sqlSession.getMapper(MemberMapper.class).idCheck(id);
	}

	@Override
	public void registerMember(MemberDto memberDto) throws Exception {
		sqlSession.getMapper(MemberMapper.class).registerMember(memberDto);
	}

	@Override
	public MemberDto login(Map<String, String> map) throws Exception {
		return sqlSession.getMapper(MemberMapper.class).login(map);
	}

}

'기록 > BACKEND' 카테고리의 다른 글

[Spring] REST API(feat.jackson-databind, json)  (0) 2022.04.28
[Spring] MyBatis Mapper interface 자동 주입  (0) 2022.04.27
[WEB] MyBatis 설정  (0) 2022.04.25
[Spring] Interceptor  (0) 2022.04.24
[Spring] File Download  (0) 2022.04.23

댓글