본문 바로가기
study/Mybatis

[Mybatis] 25. Spring에 Mybatis 적용하기 [(게시판) BoardDao.java, BoardMapper.java]

by 금이패런츠 2022. 5. 18.
728x90
반응형

BoardDao.java

package dao;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import dao.mapper.BoardMapper;
import logic.Board;

@Repository
public class BoardDao {
	@Autowired //객체 주입. DI
	private SqlSessionTemplate template;
	private Class<BoardMapper> cls = BoardMapper.class;
	private Map<String,Object> param = new HashMap<String,Object>();
	
	public int count(String boardid) {
		param.clear();
		param.put("boardid", boardid);
		return template.getMapper(cls).count(param);
	}
	public List<Board> list(Integer pageNum, int limit, String boardid) {
		param.clear();
		int startrow = (pageNum - 1) * limit + 1;
		int endrow = startrow + limit - 1;
		param.put("startrow", startrow);
		param.put("endrow", endrow);
		param.put("boardid", boardid);
		return template.getMapper(cls).list(param);
	}
	
	public void write(Board board) {
		int num = maxNum() + 1; 
		board.setNum(num);
		board.setGrp(num); 
		template.getMapper(cls).write(board);
	}
	private int maxNum() {
		return template.getMapper(cls).maxNum(param);
	}
	public Board selectOne(Integer num) {
		param.clear();
		param.put("num", num);
		return template.getMapper(cls).selectOne(param);	
	}
	
	public void readcntadd(Integer num) {
		template.getMapper(cls).readcntadd(num);
	}
	public void update(Board board) {
		template.getMapper(cls).update(board);
	}
	public void grpStepAdd(Board board) {
		template.getMapper(cls).grpStepAdd(board);		
	}
	
	public void reply(Board board) {
		board.setNum(maxNum() + 1); //답글의 num 저장
		board.setGrplevel(board.getGrplevel()+1); //답글의 grplevel로 저장 : 원글 level + 1
		board.setGrpstep(board.getGrpstep()+1);	  //답글의 grpstep로 저장 : 원글 step + 1
		template.getMapper(cls).reply(board);
	}
	public void delete(int num) {
		template.getMapper(cls).delete(num); //db에 데이터 삭제하기
	}
}

BoardMapper.java

package dao.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import logic.Board;

public interface BoardMapper {

	@Select("select count(*) from board where boardid=#{boardid}")
	int count(Map<String, Object> param);
	
	@Select("select * from "
				+ "(select rownum rnum, num, writer, subject, content, file1 fileurl, regdate, "
				+ " grp, grplevel, grpstep, pass, readcnt from "
				+ "(select * from board where boardid =#{boardid} order by grp desc, grpstep asc))"
				+ " where rnum >= #{startrow} and rnum <= #{endrow}")
	List<Board> list(Map<String, Object> param);

	@Insert("insert into board "
			+ "(num, writer, pass, subject, content, file1, boardid, regdate, readcnt, grp, grplevel, grpstep, ip)"
			+ "values " 
			+ "(#{num}, #{writer}, #{pass}, #{subject}, #{content}, #{fileurl}, #{boardid}, sysdate, 0, #{grp}, #{grplevel}, #{grpstep}, #{ip})")
	void write(Board board);

	@Select("select nvl(max(num),0) from board")
	int maxNum(Map<String, Object> param);

	@Select("select num, writer, subject, content, file1 as fileurl, regdate, "
			+ " grp, grplevel, grpstep, pass, readcnt, boardid from board where num=#{num}")
	Board selectOne(Map<String, Object> param);

	
	@Update("update board set readcnt = readcnt + 1 where num=#{num}")
	void readcntadd(Integer num);

	@Update("update board set writer=#{writer}, subject=#{subject}, content=#{content}, "
	+ " file1=#{fileurl} where num=#{num}")
	void update(Board board);

	@Update("update board set grpstep = grpstep+1 "
			+ " where grp=#{grp} and grpstep >#{grpstep}")
	void grpStepAdd(Board board);

	@Insert("insert into board "
			+ " (num, writer, pass, subject, content, file1, boardid, regdate, readcnt, grp, grplevel, grpstep, ip)"
			+ " values " 
			+ " (#{num}, #{writer}, #{pass}, #{subject}, #{content}, #{fileurl}, #{boardid}, sysdate, 0, #{grp}, #{grplevel}, #{grpstep}, #{ip})")
	void reply(Board board);

	@Delete("delete from board where num=#{num}")
	void delete(int num);
}
728x90
반응형