DAO는 data access object == 데이터 접근 객체이다.
2021.03.29 - [분류 전체보기] - [Project][Spring] VO class 만들기 에서 만든 mapper.xml에서 작성한 sql의 결과값을 DAO로 전달.
DAO파일은 interface파일이고 DAOImpl파일은 class(java)파일이다.
- DAO
package kr.co.dao;
import java.util.List;
import kr.co.vo.BoardVO;
import kr.co.vo.Criteria;
import kr.co.vo.SearchCriteria;
public interface BoardDAO {
public void write(BoardVO boardVO) throws Exception;
//public List<BoardVO> list(PageCriteria cri) throws Exception;
public List<BoardVO> list(SearchCriteria scri) throws Exception;
//public int listCount() throws Exception;
public int listCount(SearchCriteria scri) throws Exception;
public BoardVO read(int bno) throws Exception;
public void update(BoardVO boardVO) throws Exception;
public void delete(int bno) throws Exception;
}
- 큰 기능(Board) 안의 세부 기능(write, list, listCount, read, update, delete) 별로 메서드명, 매개변수 형태, 매개변수명, 예외처리 등을 설정한다.
- interface를 사용하는 이유는 기능별로 통일하고 싶은 것들을 정하는 것.
- DAOImpl
package kr.co.dao;
import java.util.List;
import javax.inject.Inject;
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;
import kr.co.vo.BoardVO;
import kr.co.vo.Criteria;
import kr.co.vo.SearchCriteria;
@Repository
public class BoardDAOImpl implements BoardDAO {
@Inject
private SqlSession sqlSession;
@Override
public void write(BoardVO boardVO) throws Exception {
sqlSession.insert("boardMapper.insert", boardVO);
}
// @Override
// public List<BoardVO> list(PageCriteria cri) throws Exception {
// return sqlSession.selectList("boardMapper.listPage", cri);
// }
//
// @Override
// public int listCount() throws Exception {
// return sqlSession.selectOne("boardMapper.listCount");
// }
@Override
public BoardVO read(int bno) throws Exception {
return sqlSession.selectOne("boardMapper.read", bno);
}
@Override
public void update(BoardVO boardVO) throws Exception {
sqlSession.update("boardMapper.update", boardVO);
}
@Override
public void delete(int bno) throws Exception {
sqlSession.delete("boardMapper.delete", bno);
}
@Override
public List<BoardVO> list(SearchCriteria scri) throws Exception {
return sqlSession.selectList("boardMapper.listPage", scri);
}
@Override
public int listCount(SearchCriteria scri) throws Exception {
return sqlSession.selectOne("boardMapper.listCount",scri);
}
}
- DAO에서 사용하는 애너테이션은 @Repository 이다.
- @Repository : 스프링 컨테이너가 component-scan에 의해 지정한 클래스를 DAO빈으로 자동 변환
- SqlSession에서제공하는메서드
- List selectList(query_id)
- List selectList(query_id, 조건)
- 타입명 selectOne(query_id)
- 타입명 selectOne(query_id, 조건)
- Map<k, v> selectMap(query_id, 조건)
- int insert(query_id, Object obj)
- int update(query_id, Object obj)
- int delete(query_id, Object obj)
- SqlSession 은 이전에 2021.03.28 - [분류 전체보기] - [Project][Spring] db연결 및 테스트에서 root-context.xml에서 빈으로 등록해줬었다.
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:/mybatis-config.xml"></property>
<property name="mapperLocations" value="classpath:mappers/**/*Mapper.xml"/>
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
</bean>
<context:component-scan base-package="kr.co.service"></context:component-scan>
<context:component-scan base-package="kr.co.dao"></context:component-scan>
<context:component-scan base-package="kr.co.vo"></context:component-scan>