MyBatis는 데이터베이스와 자바 객체 간의 매핑을 위한 오픈 소스로, Spring 프레임워크와 함께 사용될 때 강력한 데이터 액세스 계층을 제공한다. 이번 포스팅에서는 Spring 프로젝트에서 MyBatis를 사용하는 방법과 기본 문법을 알아보도록 한다!!
1. 프로젝트 세팅
먼저, Spring 프로젝트에 MyBatis를 통합하기 위해 아래와 같은 의존성을 추가해야 한다.
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>{MyBatis 버전}</version>
</dependency>
그리고 MyBatis 설정 파일(mybatis-config.xml)과 SQL 매퍼 파일들을 작성할 디렉토리를 생성한다.
2. MyBatis 설정
application.properties 파일에 데이터베이스 연결 정보를 설정한다.
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
또한, **SqlSessionFactoryBean**을 설정하여 MyBatis와 Spring을 통합한다.
@Configuration
@MapperScan("com.example.mappers")
public class MyBatisConfig {
@Autowired
private DataSource dataSource;
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*.xml"));
return factoryBean.getObject();
}
@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
나같은 경우는 아래와 같이 resources 폴더 밑에 mapper라는 폴더를 따로 생성 후 xml파일로 sql매퍼를 작성했는데
root-context.xml 파일에 아래와 같이 추가해줘야만 mybatis와 연결이된다.
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:com/spring/hr/mappers/*.xml" />
</bean>
학원에서 실습할당시에 작성했던 root-context.xml파일을 집으로 가져오지 못했기 때문에 구글링해서 찾은 코드를 첨부한다.
클래스명이나 이름, 밸류값은 자신의 상황에 맞게 변경해야 한다.
3. SQL 매퍼 작성
SQL 매퍼 파일(UserMapper.xml)을 생성하여 SQL 쿼리를 정의한다.
<?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.itbank.model.AccountDAO">
<select id="selectAll"
resultType="com.itbank.model.vo.AccountVO">
select * from account
order by idx desc
</select>
<select id="selectOne"
resultType="com.itbank.model.vo.AccountVO"
parameterType="com.itbank.model.vo.AccountVO">
select * from account
where userid = #{userid}
and userpw = #{userpw}
</select>
</mapper>
mybatis에서 쿼리문을 작성할 때에는 preparedstatement를 사용할 때 ? 를 사용했던 것처럼 받아오는 변수명을 #{변수명}으로 입력하여 쉽게 처리가 가능하다.
4. DAO 작성
마지막으로 DAO(Data Access Object)를 작성하여 MyBatis와 상호 작용한다.
public interface AccountDAO {
List<AccountVO> selectAll();
AccountVO selectOne(AccountVO user);
}
5. 서비스 및 컨트롤러에서 사용
이제 작성한 DAO를 서비스나 컨트롤러에서 주입하여 사용할 수 있습니다.
@Service
public class AccountService {
@Autowired
private AccountDAO dao;
public List<AccountVO> getBoards() {
return dao.selectAll();
}
public AccountVO login(AccountVO user) {
return dao.selectOne(user);
}
}
@Controller
@RequestMapping("/account")
public class AccountController {
@Autowired
private AccountService as;
@GetMapping("/list")
public ModelAndView list() {
ModelAndView mav = new ModelAndView();
mav.addObject("list", as.getBoards());
return mav;
}
이렇게 하면 Spring 프로젝트에서 MyBatis를 사용할 수 있다. 이외에도 MyBatis의 다양한 기능과 활용 방법에 대해서는 나도 이제 막 배운참이라 새로이 알아가는 것이 생길 때마다 공유하도록 하겠다.
이상으로 Spring에서 MyBatis를 사용하는 방법과 기본 문법에 대해 알아보았다. 추가적인 정보가 필요하다면 MyBatis 공식 문서를 참고하고 같이 공부해 나가도록 합시다!!
'Framework&Tools > Spring' 카테고리의 다른 글
JPA를 활용한 성능 개선 경험 회고 (0) | 2024.07.01 |
---|---|
Filter, Interceptor, AOP - 차이점과 적절한 사용 상황 (0) | 2024.04.17 |