MyBatis가 application.properties의 내용을 못읽습니다..도와주세요ㅠㅠ

미해결질문
Taehee-kim-dev 프로필

안녕하세요,

백기선님 강의를 2개 구매해서 들으면서,

학교 졸업작품 프로젝트를 하고있는 대학생 입니다.

강의 내용과 무관한 부분이라 매우 염치없지만..

정말 너무 해결이 안돼서 혹시나 하는 마음에

조심스럽게 질문 납겨봅니다..ㅠㅠ

SpringBoot에 MySql+MyBatis를 이용해 데이터베이스를 연동하고 있습니다.

mapper.xml 파일 경로 설정에서 해결하고싶은 문제가 생겼습니다.

맨 처음에는 아래의 사진 1과 같이 Java 세션팩토리 설정파일에서 mapper.xml파일의 경로를 설정해 주었을 경우,

[사진1]

정상 연결 및 쿼리 실행, 출력을 성공하였습니다.

그런데 제가 이후에 mapper.xml파일의 경로를, 아래 사진 2처럼

[사진2]

사진1의 코드에서 코드 3줄을 지우고,
자바 세션팩토리 설정파일이 아닌, application.properties 파일에
mybatis.mapper-locations=mappers/mapper.xml
와 같이 설정하고 싶었습니다. 아래의 사진3 처럼요.

[사진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]

[사진4]

환경

운영체제 : 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
입니다.

답변 주실 때 현재 이러한 오류가 나는 이유와
해결방안을 적용했을 때 왜 오류가 해결되는지
자세하게 설명해주시면 정말정말 감사드리겠습니다.

감사합니다!!

백기선 프로필
백기선 6달 전

글쎄요. 제가 해드릴 수 있는 답은 스프링 부트 강좌를 제대로 학습하셨다면 해결할 수 있을겁니다 뿐입니다.
특히 스프링 부트 자동 설정 관련된 부분과 외부 설정 파일 관련 수업을 다시 학습하시면 좋겠네요.

지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스