Helmi

게시판 프로젝트 - CRUD 구현 ①영속 계층 구현 준비 본문

SpringBoot

게시판 프로젝트 - CRUD 구현 ①영속 계층 구현 준비

Helmi 2023. 4. 27. 10:27

com.board.domain.BoardVO.class

package com.Borad.domain;

import java.util.Date;

import lombok.Data;

@Data
public class BoardVO {

	private Long bno;
	private String title;
	private String content;
	private String Writer;
	private Date regdate;
	private Date updatedate;

}

XML : 단순 테스트 수정하는 과정으로 끝남

어노테이션 : 코드 수정, 빌드하는 등 유지 보수성이 떨어짐(SQL 복잡해지고 검색과 같이 상황 따라 다른 SQL문 처리되는 경우 유용하지 못함)


Mapper 인터페이스

root-context.xml 일부

		<mybatis-spring:scan base-package ="com.board.mapper"/>

Mapper 인터페이스 작성 시 리스트(select), 등록(insert) 작업 우선해서 작성

 

com.board.mapper.BoardMapper.java(인터페이스)

package com.board.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Select;
import com.Borad.domain.BoardVO;

public interface BoardMapper {

	@Select(" select * from tbl_board where bno > 0")
	public List<BoardVO> getList();
	
}

BoardMapper 인터페이스 작성 시 이미 작성된 BoardVO 클래스 적극적으로 활용해 반드시 필요한 SQL을 어노테이션 속성값으로 처리 가능( SQL 작성 시 반드시 ';' 없도록 작성 )

SQL 실행 결과

 

SQL Developer에서 먼저 확인하는 이유는

1) SQL이 문제 없이 실행 가능한지 확인

2) 데이터베이스의 commit 하지 않았다면 나중에 테스트 결과 달라지므로 먼저 비교하기 위해 

 

package com.board.controller;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.board.mapper.BoardMapper;

import lombok.Setter;
import lombok.extern.log4j.Log4j;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
//java Config
//@ContextConfiguration(classes = {com.board.config.RootConfig.class})
@Log4j 
public class BoardMapperTests {

	@Setter(onMethod_ = @Autowired)
	private BoardMapper mapper;
	
	@Test
	public void testGetList() {
		mapper.getList().forEach(board -> log.info(board));
	}
}

콘솔 - 실행 결과


MapperXML 파일

BoardMapperTests 테스트 완료 - src/main/resources 내에 패키지와 동일한 com/board/mapper 단계 폴더 생성 후 XML 파일 작성. (폴더 하나씩 생성할 것!

BoardMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
	PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
	<mapper namespace ="com.board.mapper.BoardMapper">
	
	<select id ="getList" resultType="com.board.domain.BoardVO">
	<![CDATA[
	select * from tbl_board where bno > 0
	]]>
	</select>
	</mapper>

XML 작성시 반드시 <mapper>의 namespace 속성 값을 Mapper 인터페이스와 동일한 이름으로 주는 것 주의!

<select> 태그의 id 속성값은 메서드의 이름과 일치하게 작성

resultType 속성 값은 select 쿼리 결과를 특정 클래스의 객체로 만들기 위해 설정.

XML에 사용한 CDATA 부분은 XML에서 부등호 사용하기 위해 사용

 

XML에 SQL문 처리되었으니 BoardMapper 인터페이스에 SQL 제거

 

com.board.mapper.BoardMapper.java(인터페이스)

package com.board.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Select;
import com.Borad.domain.BoardVO;

public interface BoardMapper {

	//@Select("select * from tbl_board where bno > 0")
	public List<BoardVO> getList();
	
}

인터페이스 수정 후 반드시 기존 테스트 코드 통해 기존과 동일히 동작하는지 확인!

콘솔 - 실행 결과