newlecture: spring boot (4) : Dao 리펙터링

단위테스트 : JUnit

		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter-test</artifactId>
			<version>2.2.0</version>
			<scope>test</scope>
		</dependency>

위 의존성 추가한다

@MybatisTest

위 어노테이션을 통해서 테스트를 진행할 수 있다

image

위처럼 JUnit Test를 생성한다

image

바로 finish

image test는 위와 같이 JUnit test를 진행하면 된다

class NoticeDaoTest {

	@Autowired
	private NoticeDao noticeDao;

	@Test
	void test() {
		List<NoticeView> list = noticeDao.getViewList(0, 1, "title", "", false);
		System.out.println(list.get(0));
	}

}

위 테스트를 그냥 돌리게 되면 NullPointerException 발생하게 된다

IoC컨테이너가 만들어지고 Mapper객체를 주입하는 과정이 없기 때문

아래의 어노테이션을 추가하도록 하자

@AutoConfigureTestDatabase(replace = Replace.NONE)
@MybatisTest
  • @AutoConfigureTestDatabase(replace = Replace.NONE) 어노테이션은 별도의 DB를 마련하지 않고 기존 것을 사용하겠다는 뜻이다

ResultMap : Column과 Java Entity의 Field 명명 규칙이 다른 경우에 사용

	<resultMap type="com.newlecture.web.entity.NoticeView" id="noticeViewMap">
		<result property="memberName" column="member_name" />
	</resultMap>

  <select id="getViewList" resultMap="noticeViewMap" >
  ...

NoticeDao 라는 인터페이스와 구현체를 독립시키기

@Mapper 는 마이바티스와 관련된 어노테이션인데.. 이게 NoticeDao 에 있다는 것은
인터페이스 자체가 구현의 기능까지 연결된 것이므로 분리를 시키자

MybatisNoticeDaoImpl 라는 구현체를 따로 만들자 (JPA라면 JpaNoticeDaoImpl 가 될 것이다)

@Repository
public class MybatisNoticeDaoImpl implements NoticeDao {

	@Autowired
	private SqlSession sqlSession;

	@Override
	public List<NoticeView> getViewList(int offset, int size, String field,
			String query, boolean pub) {
		NoticeDao noticeDao = sqlSession.getMapper(NoticeDao.class);
		return noticeDao.getViewList(offset, size, field, query, pub);
	}

@Repository를 통해서 Dao 구현체를 IoC에 등록을 한다…

풀어서 얘기하자면
SqlSessionFactory 가 .xml 파일을 읽어(Parsing)서 mapper 객체를 생성한다음에
사용자는 SqlSession을 통해서 mapper를 꺼내 사용할 수 있다

테스트는 아래와 같이 작성한다

@SpringBootTest
class MybatisNoticeDaoImplTest {

	@Autowired
	private NoticeDao noticeDao;

	@Test
	void test() {
		List<NoticeView> list = noticeDao.getViewList(0, 1, "title", null, false);
		System.out.println(list.get(0));
	}
}

java 문법에 전혀 이상이 없는데 “must Override method” 등의 에러 메세지가 나올 떄가 있다
그럴때는 프로젝트 빌드를 하자


현재까지 나온 41강 까지 모두 완강하였다 !! 짝짝..





© 2020.12. by 따라쟁이

Powered by philz