해결된 질문
작성
·
74
0
server:
port: 8081
spring:
thymeleaf:
prefix: classpath:/templates
suffix: .html
cache: false
devtools:
livereload:
enabled: true
restart:
enabled: false
datasource:
driver-class-name: org.mariadb.jdbc.Driver
url: jdbc:mariadb://localhost:3306/boot
username: root
password:
mybatis:
mapper-locations: classpath:sqlmap/**/*.xml
configuration:
map-underscore-to-camel-case: true
package hello.sailing.v1.service;
import hello.sailing.v1.dao.MenuDao;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
@Log4j2
public class MenuSvc {
@Autowired
MenuDao menuDao;
public MenuSvc() {
log.info("===== MenuSvc , 생성자 =====");
}
public List<Map<String, Object>> doMenu() {
List<Map<String, Object>> list = menuDao.doMenu();
log.info(list);
return list;
}
public List<Map<String, Object>> dolistOld() {
List<Map<String, Object>> list = new ArrayList<>();
Map<String, Object> map = new HashMap<>();
map.put("No","1");
map.put("name","아이스아메리카노");
map.put("kind","커피");
map.put("price","2,000");
map.put("reg_day","2020.10.29");
map.put("mod_day","2021.10.29");
list.add(map);
Map<String, Object> map2 = new HashMap<>();
map2.put("No","2");
map2.put("name","아이스초코");
map2.put("kind","음료");
map2.put("price","4,000");
map2.put("reg_day","2020.10.29");
map2.put("mod_day","2021.10.29");
list.add(map2);
Map<String, Object> map3 = new HashMap<>();
map3.put("No","3");
map3.put("name","아이스불샷");
map3.put("kind","음료");
map3.put("price","4,500");
map3.put("reg_day","2020.10.29");
map3.put("mod_day","2021.10.29");
list.add(map3);
log.info(list);
return list;
}
}
package hello.sailing.v1.dao;
import org.apache.ibatis.annotations.Mapper;
import org.mybatis.spring.annotation.MapperScan;
import java.util.List;
import java.util.Map;
@Mapper
@MapperScan("hello.sailing.v1.dao")
public interface MenuDao {
List<Map<String, Object>> doMenu();
}
package hello.sailing.v1.controller;
import hello.sailing.v1.service.MenuSvc;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
import java.util.Map;
@Controller
public class MenuCon {
@Autowired
MenuSvc menuSvc;
@RequestMapping("/v1/menu")
public String doMenu(Model model){
//Data 만들기, List, Map
List<Map<String, Object>> list = menuSvc.doMenu();
//Data 송부
model.addAttribute("list",list);
model.addAttribute("hello","========= MenuCon ========");
return "/v1/menu/menu";
}
}
package hello.sailing.v1.dao;
import org.apache.ibatis.annotations.Mapper;
import org.mybatis.spring.annotation.MapperScan;
import java.util.List;
import java.util.Map;
@Mapper
@MapperScan("hello.sailing.v1.dao")
public interface MenuDao {
List<Map<String, Object>> doMenu();
}
2024-09-27T14:34:44.599+09:00 ERROR 5176 --- [nio-8081-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): hello.sailing.v1.dao.MenuDao.doMenu] with root cause
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): hello.sailing.v1.dao.MenuDao.doMenu
오류를 어떻게 수정해야 할지 모르겠어요..
BindindException이 왜 터질까요? id값도 맞게 써줬는데
답변 5
1
0
안녕하세요.
해당 프로젝트 파일을 묶어서 구글 링크나 제 메일로 보내주시면 제가 확인해볼게요.
메일은 good.dhkim@gmail.com 입니다. 구글 드라이브에 올리시고 공유해 주셔도 되구요.
0
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="hello.sailing.v1.dao.MenuDao">
<!--조회-->
<select id="doList" resultType="map">
select no, coffee, kind, price,
date_format(reg_day,'%Y,%m,%d') as reg_day,
date_format(mod_day,'%y,%m,%d') as mod_day
from coffeemenu;
</select>
</mapper>
이렇게 했는데 뭐가 잘못된걸까요?
0
0
안녕하세요, 인프런 AI 인턴입니다. mins199600님.
오류가 발생하는 주된 이유는 MyBatis가 xml
파일에서 해당 Mapper
의 SQL 구문을 찾을 수 없기 때문입니다. 많이 발생하는 실수는 xml
파일의 경로가 잘못 설정되었거나, namespace
가 정확하게 매핑되지 않았을 때 발생합니다.
다음은 몇 가지 확인 사항입니다.
xml
파일 경로 확인:
mapper-locations
설정이 classpath:sqlmap/**/*.xml
로 되어 있는데, 실제 xml
파일들이 이 경로에 존재하는지 확인해 주세요.namespace
확인:
CoffeeMenu.xml
과 같은 xml
파일의 namespace
가 hello.sailing.v1.dao.MenuDao
로 정확히 설정되어 있는지 확인하세요.다음은 확인이 필요한 부분입니다:
<!-- CoffeeMenu.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="hello.sailing.v1.dao.MenuDao">
<!-- 메뉴 조회 -->
<select id="doMenu" resultType="map">
SELECT no, coffee, kind, price,
DATE_FORMAT(reg_day,'%Y.%m.%d') AS reg_day,
DATE_FORMAT(mod_day,'%Y.%m.%d') AS mod_day
FROM coffee_menu;
</select>
</mapper>
MenuDao
인터페이스와 CoffeeMenu.xml
파일의 namespace
가 정확히 일치하는지 확인하세요.application.yaml
파일에서 mybatis.mapper-locations
설정이 실제 파일 경로와 일치하는지 확인하세요.이와 같은 검토를 통해 문제를 해결할 수 있을 것입니다. 만약 추가적인 도움이 필요하시다면 문의사항 남겨주세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
제가 해봤는데 저는 패키치 설정도 다 맞고 디비도 켜져 있고 문제가 없는데 왜 저런 오류가 날까요?