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
위 어노테이션을 통해서 테스트를 진행할 수 있다
위처럼 JUnit Test를 생성한다
바로 finish
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강 까지 모두 완강하였다 !! 짝짝..