MyBatis 테스트 오류 질문입니다
1624
작성한 질문수 4
MyBatis 적용2 - 설정과 실행 부분 테스트 오류 발생해서 질문 드립니다
JdbcTemplateV3 까지 잘 되었는데 MyBatis 적용하면 오류 발생합니다.
MyBatis 관련된 모든 Bean 들이 생성안된 것 같아요. 오류 로그가 너무 길어서 일부만 첨부드립니다
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'itemController' defined in file
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'hello.itemservice.config.MyBatisConfig':
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'itemMapper'
Caused by: java.lang.ClassNotFoundException: Cannot find class: Item
=======ItemMapper.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="hello.itemservice.repository.mybatis.ItemMapper">
<insert id="save" useGeneratedKeys="true" keyProperty="id">
insert into item (item_name, price, quantity)
values (#{itemName}, #{price}, #{quantity})
</insert>
<update id="update">
update item
set item_name = #{updateParam.itemName},
price = #{updateParam.price},
quantity = #{updateParam.quantity}
where id = #{id}
</update>
<select id="findById" resultType="Item">
select id, item_name, price, quantity
from item
where id = #{id}
</select>
<select id="findAll" resultType="Item">
select id, item_name, price, quantity
from item
<where>
<if test="itemName != null and itemName != ''">
and item_name like concat('%',#{itemName},'%')
</if>
<if test="maxPrice != null">
and price <= #{maxPrice}
</if>
</where>
</select>
</mapper>
답변 2
0
안녕하세요, 빈빈 님. 공식 서포터즈 y2gcoder 입니다.
보내주신 프로젝트 살펴봤고, 말씀해주시는 현상 확인했습니다.
원인은 간단하게 Item이 들어가있는 위치를 잘못 지정해주신 것입니다.
application.properties를 보시면
#MyBatis
mybatis.type-aliases-package=hello.itemservice.domain해당 설정이 있습니다. 해당 설정은 강의에서도 설명하듯이 타입 정보를 사용할 때 패키지를 지정해주기 위해서 쓰는 설정입니다. 위와 같이 지정하면 hello.itemservice.domain 하위에 있는 클래스들을 Mybatis의 타입으로 사용할 때, 패키지명까지 적어주지 않아도 자동으로 인식하는 것입니다.
보내주신 프로젝트를 보면 domain package가
강의와 같이 hello.itemservice 에 있는 것이 아니라
hello.itemservice.repository 하위에 위치하고 있습니다. 그래서 Mybatis가 Item 을 찾지 못해 에러가 발생했습니다.
강의와 같이 hello.itemservice으로 domain 패키지를 옮겨준 후 다시 테스트를 실행하시면 정상적으로 통과하는 것을 보실 수 있습니다.

감사합니다.
0
안녕하세요. 빈빈님, 공식 서포터즈 y2gcoder입니다.
보여주신 부분만으로는 Item을 매핑해주는 쪽에 문제가 생긴 것 같은데 정확한 판단이 어려울 것 같습니다.
혹시 ItemMapper에서 import가 제대로 되었는지 보시고 문제가 없는 것 같으시다면
전체 프로젝트를 압축한 뒤
구글 드라이브로 공유해서 링크를 남겨주세요.
1. 구글 드라이브 업로드 방법
구글 드라이브 업로드 방법 링크
2. 주의사항
구글 드라이브 공유시 권한을 반드시 확인해주세요
3. 아래 내용을 작성 부탁드립니다.
a. 프로젝트 실행 방법을 알려주세요.
b. 어떻게 문제를 확인할 수 있는지 자세한 설명을 남겨주세요.
감사합니다.
0
드라이브 링크 공유드립니다
https://drive.google.com/file/d/17jjyuLGg8OEWdtciYkwIBw_Jj_bJol-e/view?usp=sharing
MyBatis 적용한 후로
test > java > hello.itemservice > domain > ItemRepositoryTest 실행 시 오류납니다.
테스트 실행 시 콘솔에 오류 로그 발생합니다.
설정 정보 없이 임베디드 데이터베이스 생성
0
15
1
RepositoryTest의 패키지 위치가 domain인 이유
0
38
2
REQUIRES_NEW 해결 방법에 대해서 질문있습니다!!
0
32
1
update()에 사용하는 setter 질문드립니다.
0
49
1
SQL 중심적 개발의 문제점에 대한 질문
0
78
1
혹시 Containing 을 안쓰신 이유가 있을까요?
0
89
2
[공유] 스프링부트 4.x 버전 mybatis 연동
0
184
1
@repository 어노테이션
0
94
3
ItemService
0
59
1
논리 커밋, 물리 커밋 질문드립니다.
0
54
1
내부 트랜잭션 커밋은 필수인가요?
0
57
1
프록시 커넥션 객체를 반환할 때 생성하는건가요?
0
55
1
Transaction readOnly 성능 개선 (김영한님의 대한 감사인사)
2
180
2
JPQL 대신 네이티브 쿼리를 사용해야 하는 경우
0
81
1
@EventListener(ApplicationReadyEvent.class) 관련
0
90
1
트랜잭션 동기화 매니저와 데이터 소스
0
77
1
DB 관련 강의 개설 계획은 없으신건가요?
0
133
2
물리 트랜잭션 과 논리트랜잭션 용어를 맞게 이해한걸까요
0
96
1
스프링 3 버전 이상 rollbackFor 변경된듯요
1
114
1
트랜잭션 전파 질문.
0
87
1
프로젝트 오픈 에러
0
126
1
외부 트랜잭션에서 isNewTransaction이 false로 나오는거에 대해 질문드립니다
0
84
2
같은 스레드를 사용하면 트랜잭션 동기화 매니저는 같은 커넥션을 반환
0
74
1
h2 인메모리 테스트중 예약어 충돌날 경우 대처방법
0
105
1





