게시판 mybatis 적용문제
185
投稿した質問数 5
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예
[질문 내용]
안녕하세요
mybatis를 체득하고 싶어서 게시판 프로젝트를 한번 해보려고 했는데 잘 안되네요
https://drive.google.com/file/d/1ku2NtUWjeSi1OJ2Z7SLsuqqG7Y471BHv/view?usp=sharing
파일은 여기있습니다.
강의보고 따라하긴 했는데 제가 제대로 이해를 못한건가 싶습니다
제가 생각하는 (공부해서 알게 된) 순서는 이렇습니다
client의 request요청 - JSON배열로
{ "id": 1, "title": "게시글 제목", "content": "게시글 내용" } 이렇게 온다고 가정Controller에서 request를 @RequestBody 받고 service로 전송
Service에서 dto를 param으로 변환하고 param을 mapper 인터페이스의 메서드로 감싸기
Mapper 인터페이스에서 전달받은 메서드 이름과 id가 같은 mapper.xml로 보내서 CRUD 실행
service Mapper.saveBoard(param)으로 → client에 넘겨줄 responseDto로 param을 보냄
create table member(
id bigint auto_increment primary key,
board_writer varchar(20) not null,
board_passwd varchar(20) not null
);
create table board(
id bigint auto_increment primary key,
writer_id bigint not null,
title varchar(50) not null,
board_contents text not null,
board_count int default 0,
created_at timestamp default current_timestamp,
constraint fk_board foreign key(writer_id) references member(id) on delete cascade
);

테이블은 이렇고

클라이언트 실행하면 오류가 납니다;
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): Jay.Board.repository.mybatis.BoardMapper.saveBoard
at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:229) ~[mybatis-3.5.14.jar:3.5.14]
at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:53) ~[mybatis-3.5.14.jar:3.5.14]
at org.apache.ibatis.binding.MapperProxy.lambda$cachedInvoker$0(MapperProxy.java:96) ~[mybatis-3.5.14.jar:3.5.14]
at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) ~[na:na]
at org.apache.ibatis.util.MapUtil.computeIfAbsent(MapUtil.java:36) ~[mybatis-3.5.14.jar:3.5.14]
at org.apache.ibatis.binding.MapperProxy.cachedInvoker(MapperProxy.java:94) ~[mybatis-3.5.14.jar:3.5.14]
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86) ~[mybatis-3.5.14.jar:3.5.14]
at jdk.proxy2/jdk.proxy2.$Proxy63.saveBoard(Unknown Source) ~[na:na]
at Jay.Board.service.BoardService.saveBoard(BoardService.java:27) ~[main/:na]
at Jay.Board.controller.HomeController.saveBoard(HomeController.java:37) ~[main/:na]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:257) ~[spring-web-6.2.2.jar:6.2.2]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:190) ~[spring-web-6.2.2.jar:6.2.2]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.2.2.jar:6.2.2]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) ~[spring-webmvc-6.2.2.jar:6.2.2]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) ~[spring-webmvc-6.2.2.jar:6.2.2]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.2.2.jar:6.2.2]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1088) ~[spring-webmvc-6.2.2.jar:6.2.2]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:978) ~[spring-webmvc-6.2.2.jar:6.2.2]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.2.2.jar:6.2.2]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) ~[spring-webmvc-6.2.2.jar:6.2.2]
.....
이 이상은 제가 모르겠습니다….
mapper.xml이 반환되지 않는게 문제 같은데 어느부분이 문제가 되서 이러는지 도통 알 수 없네요.. 오늘 이것만 6시간째 붙잡고 있습니다..
프로그램 흐름의 순서와 그 각각 하는 일들이 어떤 일들이 펼쳐지는지를 이해하고 코딩을 하고싶습니다…
回答 2
0
ㅎㅎㅎ 해결했습니다 너무 감사드립니다 ㅎㅎㅎ
아는게 없어서 질문을 제대로 못드렸는데
혼자라도 해결해서 다행이네요 감사합니다 ㅎㅎ
0
안녕하세요. berichmore님, 공식 서포터즈 David입니다.
오류가 발생했을 땐 오류 메시지를 천천히 읽어보고 그것을 이해해 보는 게 중요합니다.
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): Jay.Board.repository.mybatis.BoardMapper.saveBoard
질문에 올려주신 오류 메시지 제일 상단의 것을 읽어보면 바인딩 예외가 발생하고 있는 것을 알 수 있습니다. 바인딩은 무언가를 묶는 행위를 말합니다.
Invalid bound statement (not found)를 보면 바인딩과 관련된 구문이 유효하지 않은 것을 알 수 있습니다. 어디서 오류가 발생했는지도 알려주고 있습니다. BoardMapper에 saveBoard에서 문제가 있다고 하네요. 공유해주신 프로젝트 내 saveBoard 쿼리를 보면 #{board_contents}가 잘못 작성된 것으로 보여집니다. 이 부분을 적절히 수정 후 다시 시도해 보시겠어요?
<insert id="saveBoard" useGeneratedKeys="true" keyProperty="id">
insert into board (writer_id,title, board_contents)
values (#{writerId}, #{title}, #{board_contents})
</insert>감사합니다.
RepositoryTest의 패키지 위치가 domain인 이유
0
17
1
REQUIRES_NEW 해결 방법에 대해서 질문있습니다!!
0
26
1
update()에 사용하는 setter 질문드립니다.
0
45
1
SQL 중심적 개발의 문제점에 대한 질문
0
71
1
혹시 Containing 을 안쓰신 이유가 있을까요?
0
81
2
[공유] 스프링부트 4.x 버전 mybatis 연동
0
170
1
@repository 어노테이션
0
88
3
ItemService
0
56
1
논리 커밋, 물리 커밋 질문드립니다.
0
53
1
내부 트랜잭션 커밋은 필수인가요?
0
55
1
프록시 커넥션 객체를 반환할 때 생성하는건가요?
0
53
1
Transaction readOnly 성능 개선 (김영한님의 대한 감사인사)
2
176
2
JPQL 대신 네이티브 쿼리를 사용해야 하는 경우
0
76
1
@EventListener(ApplicationReadyEvent.class) 관련
0
87
1
트랜잭션 동기화 매니저와 데이터 소스
0
75
1
DB 관련 강의 개설 계획은 없으신건가요?
0
132
2
물리 트랜잭션 과 논리트랜잭션 용어를 맞게 이해한걸까요
0
93
1
스프링 3 버전 이상 rollbackFor 변경된듯요
1
110
1
트랜잭션 전파 질문.
0
86
1
프로젝트 오픈 에러
0
124
1
외부 트랜잭션에서 isNewTransaction이 false로 나오는거에 대해 질문드립니다
0
82
2
같은 스레드를 사용하면 트랜잭션 동기화 매니저는 같은 커넥션을 반환
0
71
1
h2 인메모리 테스트중 예약어 충돌날 경우 대처방법
0
99
1
커스텀aop와 트랜잭션을 같이 사용할때 우선순위에 관한 질문
0
95
2

