Board 라는 클래스에 Mybatis를 적용하려 한다\
<!-- SELECT 조회 결과를 담을 Entity 클래스 별칭 설정하기 -->
<typeAliases>
<typeAlias type="com.study.springstudy.database.chap01.Person" alias="person" />
<typeAlias type="com.study.springstudy.springmvc.chap03.entity.Score" alias="score" />
<typeAlias type="com.study.springstudy.springmvc.chap04.entity.Board" alias="board" />
</typeAliases>
<!-- SQL을 적어놓은 ...Mapper.xml 파일들을 사용등록하는 영역 -->
<mappers>
<mapper resource="mappers/PersonMapper.xml" />
<mapper resource="mappers/ScoreMapper.xml" />
<mapper resource="mappers/BoardMapper.xml" />
</mappers>
mybatis-config.xml 파일 에 (없으면 생성)
이렇게 추가해준다 typeAliases는 board라는 다섯글자로 경로를 줄여서 타입하도록 하기 위해 작성하고
매퍼는 등록해준다 BoardMapper.xml 이 없다면 생성해준다.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.study.springstudy.springmvc.chap04.mapper.BoardMapper">
<insert id="save">
INSERT INTO tbl_board
(writer, title, content)
VALUES
(#{writer}, #{title}, #{content})
</insert>
<select id="findAll" resultType="board">
SELECT * FROM tbl_board
</select>
<select id="findOne" resultType="board">
SELECT * FROM tbl_board
WHERE board_no = #{boardNo}
</select>
<delete id="delete">
DELETE FROM tbl_board
WHERE board_no = #{boardNo}
</delete>
<update id="upViewCount">
UPDATE tbl_board
SET view_count = view_count + 1
WHERE board_no = #{boardNo}
</update>
</mapper>
BoardRepositoryimpl 에 있는 sql 코드를 가져와 컨트롤러에 필요한 각각 함수이 이름을 작성해주고
where 절에는 스네이크케이스로 sql에서 받는 문자인 board_no (예를들어) 와 자바에서 사용중인 변수명 boardNo를 해준다.
/// 컨트롤러 ///
// private final BoardRepository repository;
private final BoardService service;
@GetMapping("/list")
public String list(Model model) {
System.out.println("/board/list GET");
List<BoardListResponseDto> boardList = service.getList();
model.addAttribute("bList", boardList);
return "board/list";
컨트롤러에 있는 findAll을 예로들자.
우선 의존 레파지토리를 service로 바꿔준다. 그리고 service에 있는 findAll 기능이 들어간 함수명을 적어주도록 한다.
@PostMapping("/write")
public String write(BoardWriteRequestDto dto) {
System.out.println("/board/write POST! ");
// 1. 브라우저가 전달한 게시글 내용 읽기
System.out.println("dto = " + dto);
// 2. 해당 게시글을 데이터베이스에 저장하기 위해 엔터티 클래스로 변환
Board b = dto.toEntity();
// 3. 데이터베이스 저장 명령
service.save(b);
return "redirect:/board/list";
}
service.save(b)로 역시 바꿔주고 나머지 함수들의 출처로 service로 변경해주도록 한다.
@RequiredArgsConstructor
@Service
public class BoardService {
private final BoardMapper repository;
public List<BoardListResponseDto> getList() {
List<Board> boardList = repository.findAll();
return boardList.stream()
.map(BoardListResponseDto::new)
.collect(Collectors.toList());
}
// 삭제 중간처리
public boolean delete(int boardNo) {
return repository.delete(boardNo);
}
public boolean save(Board b) {
return repository.save(b);
}
public Board findOne(int bno) {
return repository.findOne(bno);
}
public void upViewCount(int bno) {
}
}
명령의 순서는 그래서 컨트롤러 ➟ 서비스 ➟ Mapper 로 돌아가게 된다.
서비스는 매퍼로 다시 돌아간다.
@Mapper
public interface BoardMapper {
// 게시물 목록 조회
List<Board> findAll();
// 게시물 상세 조회
Board findOne(int boardNo);
// 게시물 등록
boolean save(Board b);
// 게시물 삭제
boolean delete(int boardNo);
// 조회수 상승
void upViewCount(int boardNo);
}
'Spring' 카테고리의 다른 글
[MariaDB] MariaDB ERROR 2002 (HY000): Can't connect to local server through socket '/tmp/mysql.sock' (2) (0) | 2024.09.16 |
---|---|
[중앙정보처리학원] JSON* (0) | 2024.05.24 |
[중앙정보처리학원] Spring* 객체지향 설계원칙 SOLID (0) | 2024.05.13 |
[중앙정보처리학원] Spring* basic (0) | 2024.05.13 |