package com.samsung.sample.board.dao; // 샘플 게시판 DAO 패키지이다.

import java.util.List; // 목록 조회를 위해 List 타입을 사용한다.

import org.apache.ibatis.session.SqlSession; // MyBatis SqlSession을 사용한다.
import org.springframework.stereotype.Repository; // DAO 빈 등록을 위해 Repository를 사용한다.

import com.samsung.sample.board.entity.SampleBoard; // 샘플 게시판 엔티티를 사용한다.

@Repository // 샘플 게시판 DAO를 스프링 빈으로 등록한다.
public class SampleBoardDao { // samples 테이블 CRUD를 처리하는 DAO이다.

    private static final String MAPPER = "sampleBoardMapper."; // MyBatis 매퍼 네임스페이스 접두어이다.

    private final SqlSession sqlSession; // MyBatis 세션 객체이다.

    public SampleBoardDao(SqlSession sqlSession) { // 생성자에서 의존성을 주입받는다.
        this.sqlSession = sqlSession; // 주입받은 세션을 필드에 저장한다.
    } // 생성자를 종료한다.

    public List<SampleBoard> selectSampleBoardList() { // 게시글 목록을 조회한다.
        return sqlSession.selectList(MAPPER + "selectSampleBoardList"); // 매퍼의 목록 조회 쿼리를 실행한다.
    } // 목록 조회 메서드를 종료한다.

    public SampleBoard selectSampleBoard(Integer id) { // 게시글 한 건을 조회한다.
        return sqlSession.selectOne(MAPPER + "selectSampleBoard", id); // 매퍼의 단건 조회 쿼리를 실행한다.
    } // 단건 조회 메서드를 종료한다.

    public void insertSampleBoard(SampleBoard sampleBoard) { // 게시글을 등록한다.
        sqlSession.insert(MAPPER + "insertSampleBoard", sampleBoard); // 매퍼의 등록 쿼리를 실행한다.
    } // 등록 메서드를 종료한다.

    public void updateSampleBoard(SampleBoard sampleBoard) { // 게시글을 수정한다.
        sqlSession.update(MAPPER + "updateSampleBoard", sampleBoard); // 매퍼의 수정 쿼리를 실행한다.
    } // 수정 메서드를 종료한다.

    public void deleteSampleBoard(Integer id) { // 게시글을 삭제한다.
        sqlSession.delete(MAPPER + "deleteSampleBoard", id); // 매퍼의 삭제 쿼리를 실행한다.
    } // 삭제 메서드를 종료한다.
} // DAO 정의를 종료한다.
