[이 글]과 달라진 점만 체크한다.
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 |
댓글