10. 스프링부트 MVC - MyBatis DAO 방식
in Gitlog on springboot-mvc
해당 포스팅은 @Repository 애너테이션을 사용해서 DAO 객체를 생성해 MyBatis의 SqlSession을 사용하는 방식이다.
개발 환경
- OS: Window 10
- Dev Tool: Eclipse IDE 2019-06
- JDK: 1.8(_221)
- JAVA: 8
- Framework: Springboot v2.1.7
- Build Tool: Gradle v3
- RDBMS: MariaDB
- DBCP: hikariCP
- Persistence Framework: MyBatis
- #Lombok #Log4j2 #DAO
참고 URL
이정도는 보고 가면 좋을 듯 해서 복붙 수준의 포스팅 내용이다.
오랜만에 다시 스프링부트 포스팅이다. 관심사와 실제 포스팅이 진행상태가 달라서 이제는 숙제가 된 느낌이다…
@Repository, DAO 객체 생성
DAO 객체를 생성하고, @Repository 애너테이션 선언해 빈으로 등록하면서 Data Access Layer라는 것을 스프링이 인지하게 된다.
마이바티스 스프링 모듈의 SqlSessionTemplate을 을 주입 받아서 Mapper xml 파일의 namespace 와 queryid 로 쿼리를 호출해 결과를 리턴 받는 개념이다.
BoardDao.java
- neo.apps.board.dao
@Repository
public class BoardDao {
@Autowired
private SqlSessionTemplate sqlSession;
public int selectBoardListCnt(BoardDto boardDto){
return sqlSession.selectOne("Board.selectBoardListCnt", boardDto);
}
public List<BoardDto> selectBoardList(BoardDto boardDto){
return sqlSession.selectList("Board.selectBoardList", boardDto);
}
public BoardDto selectBoard(int boardIdx){
return sqlSession.selectOne("Board.selectBoard", boardIdx);
}
public int insertBoard(BoardDto boardDto){
return sqlSession.insert("Board.insertBoard", boardDto);
}
public int updateBoard(BoardDto boardDto){
return sqlSession.update("Board.updateBoard", boardDto);
}
}
ServiceImpl, DAO 주입
구현체에서 기존에 Mapper Interface가 주입 방식이 아닌 DAO 객체를 주입받아서 쿼리에 접근할 수 있게 아래와 같이 수정했다.
주석은 삭제해도 상관없을 듯 하다.
@Service
public class BoardServiceImpl implements BoardService {
//@Autowired
//private BoardMapper boardMapper;
@Autowired
private BoardDao boardDao;
/*
MyBatis Mapper 방식
public int selectBoardListCnt(HttpServletRequest request, BoardDto boardDto) throws Exception {
return boardMapper.selectBoardListCnt(boardDto);
}
public List<BoardDto> selectBoardList(HttpServletRequest request, BoardDto boardDto) throws Exception {
return boardMapper.selectBoardList(boardDto);
}
public BoardDto selectBoard(HttpServletRequest request, int boardIdx) throws Exception {
return boardMapper.selectBoard(boardIdx);
}
public void insertBoard(HttpServletRequest request, BoardDto boardDto) throws Exception {
boardMapper.insertBoard(boardDto);
}
public void updateBoard(HttpServletRequest request, BoardDto boardDto) throws Exception {
boardMapper.updateBoard(boardDto);
}
*/
public int selectBoardListCnt(HttpServletRequest request, BoardDto boardDto) throws Exception {
return boardDao.selectBoardListCnt(boardDto);
}
public List<BoardDto> selectBoardList(HttpServletRequest request, BoardDto boardDto) throws Exception {
return boardDao.selectBoardList(boardDto);
}
public BoardDto selectBoard(HttpServletRequest request, int boardIdx) throws Exception {
return boardDao.selectBoard(boardIdx);
}
public int insertBoard(HttpServletRequest request, BoardDto boardDto) throws Exception {
return boardDao.insertBoard(boardDto);
}
public int updateBoard(HttpServletRequest request, BoardDto boardDto) throws Exception {
return boardDao.updateBoard(boardDto);
}
}
SQL.xml namespace 변경
DAO로 접근 시에는 namespace를 전체경로로 적지 않아도 되기에 아래와 같이 수정한다.
<!-- <mapper namespace="neo.apps.board.mapper.BoardMapper"> -->
<mapper namespace="Board">
해당 포스팅은 이렇게 끝이다. 이어서 DAO를 공통 DAO로 생성 후 접근하는 방식에 대해서 알아보겠습니다.