본문 바로가기
카테고리 없음

[Project][Spring] DAO / DAOImpl

by 321 2021. 3. 29.

 

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)

 

 

<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>