● 코딩학원 공부내용 정리
1. 이번주 금요일 능력단위 평가.
지금까지 공부한 내용을 한사이클 돌린다고 생각하자. 이해되지 않아도 한번 사용해본다고 생각하자.
2. 오류가 났다.
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error updating database. Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.earth.korea.dao.BoardMapper.deleteAll
### Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.earth.korea.dao.BoardMapper.deleteAll
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:96)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)
at com.sun.proxy.$Proxy26.delete(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.delete(SqlSessionTemplate.java:296)
at com.earth.heart.dao.BoardDaoImpl.deleteAll(BoardDaoImpl.java:32)
at com.earth.heart.BoardDaoImplTest.insertTest(BoardDaoImplTest.java:39)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:74)
at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84)
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:93)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:40)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:529)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:756)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:452)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)
Caused by: org.apache.ibatis.exceptions.PersistenceException:
### Error updating database. Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.earth.korea.dao.BoardMapper.deleteAll
### Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.earth.korea.dao.BoardMapper.deleteAll
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:199)
at org.apache.ibatis.session.defaults.DefaultSqlSession.delete(DefaultSqlSession.java:207)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)
... 36 more
Caused by: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.earth.korea.dao.BoardMapper.deleteAll
at org.apache.ibatis.session.Configuration$StrictMap.get(Configuration.java:1097)
at org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:875)
at org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:868)
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:196)
... 42 more
3. 위 오류의 원인 예시
(1) mapper id가 틀린 경우
(2) Parameter와 bean의 field명이 틀린 경우
(3) sql.xml에서 정의된 namespace와 DAO에서 호출하는 namespace가 다를 경우
(4) mapper가 정의가 되어 있지 않거나 Spelling이 틀린 경우
(5) mapper에 정의된 namespace 명칭이 같은 Application 내에 중복 될 경우
아래가 원인인가? 아닌거같다.
찾아보니 이전 파일 복사붙여넣기 하면서 패키지명이 다른 것을 발견했다.
패키지명을 수정하니 @Test가 실행됐다.
결국 해결했고, 데이터를 입력할 수 있었다.
4. 그러나 또 다른 오류가 발생. 오류와 친해지겠다.
org.apache.jasper.JasperException: 행 [86]에서 [/WEB-INF/views/boardlist.jsp]을(를) 처리하는 중 예외 발생
83: </tr>
84: <c:forEach var="boardDto" items="${list } ">
85: <tr>
86: <td class="no">${boardDto.bno }</td>
87: <td class="title">
88:
89: <a href="">${boardDto.title }</a>
${}가 뭔데? 계속 막히네 정말 나비효과다. 하나가 막히니 계속 막힌다. 수업 진도를 못따라가고 있다. 못따라가봤자 나만 손해다. 아무도 신경 안씀. 해내는 것이 중요하다.
${}는 JSP에서 사용되는 표현 언어(EL, Expression Language)입니다. EL은 JSP 페이지에서 데이터를 가져오고 표현하는 데 사용되는 간편한 표기법.
EL의 주요 역할
- 변수 접근: ${} 안에 변수 이름을 사용하여 JSP 페이지에서 정의된 변수의 값을 가져올 수 있습니다. 이를 통해 데이터를 동적으로 표현하거나 화면에 출력
- 프로퍼티 접근: ${} 안에 객체의 프로퍼티 이름을 사용하여 객체의 속성 값을 가져올 수 있습니다. 예를 들어 ${user.name}은 user 객체의 name 프로퍼티 값을 가져옴
- 메서드 호출: ${} 안에 메서드 이름과 인자를 사용하여 객체의 메서드를 호출할 수 있습니다. 예를 들어 ${user.getName()}은 user 객체의 getName() 메서드를 호출.
- 연산: ${} 안에서 산술 연산, 논리 연산, 비교 연산 등을 수행할 수 있습니다. 이를 통해 조건부 표현과 계산을 수행.
EL은 JSP 페이지의 가독성과 유지 보수성을 향상시키는 데 도움을 주는 강력한 기능입니다. 변수와 객체의 값을 편리하게 가져와서 JSP 페이지에서 동적으로 사용할 수 있도록 해줍니다.
5. SearchItem.getQueryString 메서드가 없다? 분명히 있는데 왜그러니?
에러의 원인은 접근제어자였다. public이 아니라 private을 사용했기 때문에 외부에서 접근이 되지 않았다.
private를 사용하면 같은 클래스 내에서만 접근이 가능하다.
6. 게시판을 일단 만들기는 했다.
7. url매핑은 컨트롤러가 다 받는다? 무슨 말이지???
8. 이제는 게시판 사용자에서 게시판 설계자가 됐다. 작동 원리를 알아야 한다.
9. 2. URI 정의
URL HTTP 메소드
1) 읽기 /board/read?bno=번호 GET방식 지정된 번호의 게시물을 보여줌
2) 삭제 /board/remove POST방식 게시물 삭제
3) 쓰기 /board/write GET방식 게시물 작성할 빈화면을 보여줌
/board/write POST방식 작성한 게시물 저장
4) 수정 /board/modify?bno=번호의 GET방식 게시물 수정하기 위해 읽어옴
/board/modify POST방식 수정된 게시물 저장
10. J쿼리를 사용한다.
11. eq : equal이면 등록코드가 보인다. eq를 ne로 바꾸면 버튼이 보인다.
12. 오늘은 여기까지.
'코딩 학원(국비지원)' 카테고리의 다른 글
75일차 코딩학원 (0) | 2023.05.08 |
---|---|
74일차 코딩학원 (0) | 2023.05.04 |
72일차 코딩학원 (0) | 2023.05.02 |
71일차 코딩학원 (1) | 2023.05.01 |
70일차 코딩학원. 오류하나 덕분에 하루종일 고민함 (0) | 2023.04.28 |