Develop
[Error] mapper에서 getter, setter 메서드 호출 오류 본문
spring legacy를 사용할 때는 mapper에서 sql을 작성할 때 #{변수명} 을 하면
해당 변수의 getter나 setter 함수를 불러온다고 배웠다.
그러나 spirng boot의 mapper에서 똑같이 sql을 작성했는데
해당 값을 찾지 못하는 오류가 발생했다
= get 매서드 호출을 못함
결론부터 말하자면 spring boot에서는 변수가 없으면 불러오지 못하는것 같다.
mapper
<!-- 전체 글 목록 -->
<select id="noticeList" parameterType="CriVO" resultType="noticeVO">
SELECT /* noticeList */
NO_NUM,
NO_TITLE
FROM
NOTICE
WHERE
NO_STATE = "upload"
ORDER BY
NO_NUM DESC
LIMIT
#{pageStart},#{pageSize}
</select>
LIMIT 뒷부분에 적힌 #{pageStart} 값이 없어서 sql 실행시 오류가 나는 문제였다.
pageStart는 페이징처리를 위한 값으로 Criteria 라는 VO 파일에 정의해놓은 매서드이다.
Criteria
package com.example.demo.domain;
import org.apache.ibatis.type.Alias;
import lombok.Data;
/**
* 페이징 처리를 계산하는 기준들
*/
@Data
@Alias("CriVO")
public class Criteria{
private int page;
private int pageSize; // 한페이지에 표시되는 리스트 개수
private String keyword;
// 기본 설정
public Criteria() {
this.page = 1;
this.pageSize = 5;
}
//
public void setPage(int page) {
if(page <= 0) {
this.page = 1;
return;
}
this.page = page;
}
//
public void setPageSize(int pageSize) {
if(pageSize <= 0 || pageSize > 100) {
this.pageSize = 10;
return;
}
this.pageSize = pageSize;
}
// 변수를 저장하기위한 목적X
// mapper에서 호출되는 메서드 #{pageStart }를 호출함
public int getPageStart() {
return this.page -1 * pageSize;
}
}
코드를 보면 pageStart라는 변수는 존재하지 않고
아래와 같이 매서드만 존재한다.
public int getPageStart() {
return this.page -1 * pageSize;
}
계속 오류가 나서 그냥 변수를 만들어주었다.
수정한 Criteria
package com.example.demo.domain;
import org.apache.ibatis.type.Alias;
import lombok.Data;
/**
* 페이징 처리를 계산하는 기준들
*/
@Data
@Alias("CriVO")
public class Criteria{
private int page;
private int pageSize; // 한페이지에 표시되는 리스트 개수
private String keyword;
private int pageStart; // 현재 페이지에서 시작되는 페이지의 숫자
// 기본 설정
public Criteria() {
this.page = 1;
this.pageSize = 5;
}
//
public void setPage(int page) {
if(page <= 0) {
this.page = 1;
return;
}
this.page = page;
}
//
public void setPageSize(int pageSize) {
if(pageSize <= 0 || pageSize > 100) {
this.pageSize = 10;
return;
}
this.pageSize = pageSize;
}
// mapper에서 호출되는 메서드 #{pageStart }를 호출함
public int getPageStart() {
this.pageStart = (this.page -1 ) * pageSize;
return pageStart;
}
}
코드를 보면 변수를 정의하는 위쪽에
private int pageStart; // 현재 페이지에서 시작되는 페이지의 숫자
pageStart를 정의해 주었고
getPageStart() 메서드도 조금 수정해주었다
// mapper에서 호출되는 메서드 #{pageStart }를 호출함
public int getPageStart() {
this.pageStart = (this.page -1 ) * pageSize;
return pageStart;
}
그냥 pageStart의 값을 불러오는 것이 아니기 때문에 변수를 추가했다고 매서드를 지워버리면 안된다.
상사의 조언으로 디컴파일도 해보았는데 왜 불러오지 않는지 이유는 알 수 없었다.....
디컴파일을 위해 JdGUI라는 프로그램을 사용하였다.
target 에 있는 class 파일을 열기만 하면 된다.
'웹 개발 > Error' 카테고리의 다른 글
오류 났을 때 스택트레이스 읽기 방법과 중요성 (0) | 2025.01.06 |
---|---|
스프링부트 새프로젝트 생성시 나는 오류 (0) | 2024.12.31 |
[Error] class/typealias not found : Alias 못찾는 오류 (0) | 2024.03.08 |
[Error] Uncaught TypeError: back is not a function at HTMLInputElement.onclick (0) | 2024.02.15 |