반응형
Mapper란?
- Mybatis 매핑XML에 기재된 SQL을 호출하기 위한 인터페이스이다. Mybatis3.0부터 생겼다.
DAO란?
- Data Access Object의 약어로 실질적으로 DB에 접근하여 데이터를 조회하거나 조작하는 기능을 전담하는 객체를 말한다. DAO의 사용 이유는 효율적인 커넥션 관리와 보안성 때문이다. DAO는 저수준의 Logic과 고급 비즈니스 Logic을 분리하고 domain logic으로부터 DB관련 mechanism을 숨기기 위해 사용한다.
Mapper vs DAO
DAO를 사용하는 방법
- SqlSession을 등록해줘야 한다.
- DAO인터페이스와 인터페이스를 구현한 DAO클래스를 생성해줘야한다.
- Mapper인터페이스를 사용하지 않았을 때는 네임스페이스 + “.” + SQL ID로 지정해서 SQL을 호출해야한다.(예를들면 sesseion.selectOne(“com.test.mapper.TimeMapper.getReplyer, bno ))
- selectOne, insert, delete 등 제공하는 메소드를 사용해야 한다.
- 문자열로 작성하기 때문에 버그가 생길 수 있다.
- IDE에서 제공하는 code assist를 사용할 수 없다.
BoardService.java
@Service("boardService")
public class ProductInqManageService {
@Resource(name="boardDAO")
private BoardDAO boardDAO;
/**
* 목록 조회
* @param boardVO
* @return
*/
public BoardVO findOneByDetail(BoardVO boardVO){
return boardDAO.selectList(boardVO);
}
}
BoardDAO.java
@Repository("boardDAO")
public class ProductInqManageMapper extends EgovAbstractMapper{
@Resource(name="egov.sqlSession")
public void setSqlSessionFactory(SqlSessionFactory sqlSession) {
super.setSqlSessionFactory(sqlSession);
}
/**
* 목록 조회
* @param boardVO
* @return
*/
public List<?> selectList(BoardVO boardVO) {
return getSqlSession().selectList("BoardMapper.selectList", boardVO);
}
}
BoardMapper.xml
<?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="BoardMapper">
<select id="selectList" parameterType="BoardVO" resultType="BoardVO">
SELECT
id,
title,
contects
FORM board
WHERE 1=1
</select>
Mapper인터페이스를 사용하는 방법
- Mapper인터페이스는 개발자가 직접 작성한다.
- mapper 네임스페이스는 패키지명을 포함한 인터페이스 명으로 작성한다.
- SQL id는 인터페이스에 정의된 메서드명과 동일하게 작성한다
BoardService.java
@Service("boardService")
public class ProductInqManageService {
@Autowired
private BoardMapper boardMapper;
/**
* 목록 조회
* @param boardVO
* @return
*/
public BoardVO selectList(BoardVO boardVO){
return boardMapper.selectList(boardVO);
}
}
BoardMapper.java
@Mapper
@Repository
public interface BoardMapper{
/**
* 목록 조회
* @param boardVO
* @return
*/
public List<BoardVO> selectList(BoardVO boardVO)
}
BoardMapper.xml
<?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.demo.mapper.BoardMapper">
<select id="selectList" parameterType="BoardVO" resultType="BoardVO">
SELECT
id,
title,
contects
FORM board
WHERE 1=1
</select>
결론
구조가 Mybatis3.0 이후로 나온 방식이기 때문에 더 최근에 나온 방식이며 사용하기도 더 편리하다. 단 DB에 접근하는 Layer명을 Mapper로 할지 DAO로 할지(혹은 Repository)로 할지는 개발자 기호에 맞게 정해서 구조를 잡으면 될 것 같다. DB와 연동되는 인터페이스의 용어가 Mapper보단 DAO가 좋다 싶으면 1)구조로 가되 명명규칙만 DAO로 변경하면 된다. 단 xml파일의 수정이 조금 필요하다.(Mapper.xml과 인터페이스의 파일명이 일치하지 않는 경우 추가 조치가 필요하다.)
반응형
'Java' 카테고리의 다른 글
[JAVA] Spring Annotation @MapperScan이란? (0) | 2022.08.17 |
---|---|
[JAVA]Spring Boot 압축 파일 다운받기(Spring boot zip file download) (0) | 2022.05.09 |
[JAVA] Primitive type(기본 타입) VS Reference type(참조 타입) (0) | 2022.04.11 |
[JAVA] @ReqeustBody와 @ResponseBody 란? (0) | 2022.02.12 |
[JAVA] DTO vs VO (0) | 2022.02.10 |