MyBatis가 application.properties의 내용을 못읽습니다..도와주세요ㅠㅠ
1197
작성한 질문수 21
안녕하세요,
백기선님 강의를 2개 구매해서 들으면서,
학교 졸업작품 프로젝트를 하고있는 대학생 입니다.
강의 내용과 무관한 부분이라 매우 염치없지만..
정말 너무 해결이 안돼서 혹시나 하는 마음에
조심스럽게 질문 납겨봅니다..ㅠㅠ
SpringBoot에 MySql+MyBatis를 이용해 데이터베이스를 연동하고 있습니다.
mapper.xml 파일 경로 설정에서 해결하고싶은 문제가 생겼습니다.
맨 처음에는 아래의 사진 1과 같이 Java 세션팩토리 설정파일에서 mapper.xml파일의 경로를 설정해 주었을 경우,
정상 연결 및 쿼리 실행, 출력을 성공하였습니다.
그런데 제가 이후에 mapper.xml파일의 경로를, 아래 사진 2처럼
사진1의 코드에서 코드 3줄을 지우고,
자바 세션팩토리 설정파일이 아닌, application.properties 파일에
mybatis.mapper-locations=mappers/mapper.xml
와 같이 설정하고 싶었습니다. 아래의 사진3 처럼요.
그런데 이렇게 하니까 mybatis invalid bound statement (not found) 에러가 뜹니다.
어떻게 하면 자바세션팩토리 설정파일에 mapper.xml파일의 경로를 적지 않고,
application.properties파일에 적어서 해결할 수 있는지 알고싶습니다!
코드
[MyBatisConfig.java]
package com.inu555.smart_busbell.server.config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
@configuration
public class MyBatisConfig {
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception{
SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
sqlSessionFactory.setDataSource(dataSource);
// sqlSessionFactory.setTypeAliasesPackage("com.inu555.smart_busbell.server.vo");
// PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver = new PathMatchingResourcePatternResolver();
// sqlSessionFactory.setMapperLocations(pathMatchingResourcePatternResolver.getResources("classpath:/mappers/*.xml"));
return sqlSessionFactory.getObject();
}
@Bean
SqlSessionTemplate sqlSession(SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
}
================================================================
[MySqlReservationDao.java]
package com.inu555.smart_busbell.server.dao;
import com.inu555.smart_busbell.server.vo.Reservation;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
@component
@Mapper
public interface MySqlReservationDao {
// 예약객체정보 데이터베이스에 저장
int insert(Reservation reservation) throws Exception;
// 안드로이드 식별자로 예약정보 데이터베이스에서 삭제
int delete(String androidClientIdentifier) throws Exception;
// 안드로이드 식별자로 예약한 정보가 있는지 확인
Reservation selectOne(String androidClientIdentifier) throws Exception;
// 특정 버스에 특정 정류장으로 예약한 사람 모두 조회
List selectList(HashMap<String, String> param) throws Exception;
// 안드로이드 식별자로 예약정보 업데이트
int update(Reservation reservation) throws Exception;
}
================================================================
[resources/mappers/MySqlReservationDao.xml]
환경
운영체제 : Windows10
언어 : Java, XML
IDE : Intellij ultimate spring boot
라이브러리
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.2.2.RELEASE
com.inu555
smart_busbell
0.0.1-SNAPSHOT
smart_busbell
Main server of smart busbell by inu555
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- JSON 데이터 활용을 위한 Jaskson 라이브러리 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
시도해본 방법
mapper.xml, mapper.java 로 mapper xml파일과 java interface 파일의 이름을 일치시켜봄.
mapper의 namespace 또한 java interface의 풀패키지명을 포함해서 적어줌.
두 개의 파일을 같은 폴더에 넣어봄.
mapper.xml 경로 앞에 classpath 를 붙여봄.
구글링 하여 찾을 수 있는 거의 대부분의 mapper.xml 경로설정,
mybatis 사용법을 12시간 이상 찾아보고 적용해봄.
에러문구를 통해서도 구글링 하여봄.
전체 SpringBoot 프로젝트는
https://github.com/taehee-kim-dev/SmartBusbell/tree/master/SpringBoot_main_server
입니다.
답변 주실 때 현재 이러한 오류가 나는 이유와
해결방안을 적용했을 때 왜 오류가 해결되는지
자세하게 설명해주시면 정말정말 감사드리겠습니다.
감사합니다!!
답변 1
1
글쎄요. 제가 해드릴 수 있는 답은 스프링 부트 강좌를 제대로 학습하셨다면 해결할 수 있을겁니다 뿐입니다.
특히 스프링 부트 자동 설정 관련된 부분과 외부 설정 파일 관련 수업을 다시 학습하시면 좋겠네요.
자동설정 만들기 1부의 Holoman 관련 문의 드립니다.
0
84
1
라이브러리 개발 예제 강의를 찾습니다 !!!
0
225
2
강의 진행되로 똑같이 했는데 jquery가 실행되지 않았는데
0
310
1
HateOas 가 업데이트가 되어서, "Spring HATEOAS" 코드를 아래처럼 하셔야 될겁니다.
0
364
2
springSecurit jwt에 대해서 질문드립니다.
0
343
1
섹션2 자동설정 부분 질문있습니다.
0
249
1
mongo shell 명령어 대체 mongo -> mongosh
0
1012
1
데이터베이스 마이그레이션 강의에서 질문 있습니다
0
707
0
자동 설정 만들기 2부에서 질문 있습니다
0
413
1
의존성 관리 응용 부분에서 질문 있습니다
0
321
0
Intellij 에서 빈 주입할때 계속 빨간줄이 뜨는데 어떻게 고쳐야 할까요
0
1184
1
자동설정으로 다른 프로젝트 빈 사용(번외질문)
0
363
0
CREATE TABLE 예제 따라하다가 'expected "identifier"; SQL statement:' 오류나는 경우
2
2212
2
junit5 관련하여 질문드립니다.
0
307
2
맨 처음 프로젝트 생성 후 Run 시 에러
0
535
2
외부 설정과 관련된 질문입니다.
0
255
1
test와 runner account.setEmail에 동일한 값 입력
0
323
1
컨트롤러 view 호출
0
265
1
JVM 과 arguments 는 뭔가요???
0
1170
1
pom 테그 에러
0
355
1
안녕하십니까 기선님!!!!! webclient와 비동기관련 질문요청드립니다
0
1554
1
webEnvironment 내장 톰캣
0
228
1
application.yml 파일 분리
0
393
1
안녕하세요 기선님 서블릿 어플리케이션 구조에 대해 질문드립니다
0
281
1





