728x90
Dto의 getter 메소드는 sql 문에서 사용될 수 있을까???
<!-- 커뮤니티 목록 조회-->
<select id="getList" parameterType="kr.co.example.project.memberApi.community.dto.CommunityDto"
resultType="kr.co.example.project.memberApi.community.dto.CommunityDto">
SELECT
c.idx,
c.member_idx,
c.title,
c.contents,
c.crte_dt,
c.del_yn
FROM tb_community c
<where>
c.del_yn = 'N'
<if test="keyword != null and keyword != ''">
AND c.title LIKE '%${keyword}%'
</if>
</where>
ORDER BY crte_dt DESC
<if test="pSize != null and pSize != 0">
LIMIT #{pSize} OFFSET #{pIndex}
</if>
</select>
이전 쿼리를 보며 새로운 쿼리를 작성하던 중 궁금증이 생겼다.
LIMIT #{pSize} OFFSET #{pIndex}
이 부분이다.
포스트맨 요청은 이렇게 pSize, pNum 이렇게 넣어서 조회를 한다. 그런데, 쿼리에서는 ${pNum}이 아닌 ${pIndex}로 조회하고 있었다.
Dto 는 아래와 같다.
@Data
public class CommunityDto extends BaseDto {
private Integer idx;
private Integer memberIdx;
private String title;
private String contents;
private LocalDate crteDt;
private String delYN;
}
@JsonInclude(JsonInclude.Include.NON_NULL)
public class BaseDto {
// 페이지번호
@JsonProperty("pNum")
public Integer pNum;
// 페이지크기
@JsonProperty("pSize")
public Integer pSize;
// 페이지인덱스
@JsonProperty("pIndex")
public Integer pIndex;
@JsonProperty("keyword")
public String keyword;
/**
* ==== Getter / Setter ====
*/
public Integer getpNum() {
return pNum;
}
public void setpNum(Integer pNum) {
this.pNum = pNum;
}
public Integer getpSize() {
return pSize;
}
public void setpSize(Integer pSize) {
this.pSize = pSize;
}
// 이 메서드는 쓰지를 않는데 ????
public Integer getpIndex() {
if (this.pNum != null && this.pSize != null) {
return (this.pNum - 1) * this.pSize;
}
else
return this.pIndex;
}
public void setpIndex(Integer pIndex) {
this.pIndex = pIndex;
}
public String getKeyword() {
return keyword;
}
public void setKeyword(String keyword) {
this.keyword = keyword;
}
}
어떻게 pNum을 쿼리스트링으로 넣어주는데 pIndex로 자동 변환이 되어 조회를 해주는 걸까?
심지어 Dto에서는 getpIndex() 메서드는 사용하지를 않아서 아래와 같이 떴다. 뭐지? 얘 왜 필요한거지?
마이바티스는 ${pIndex} 이렇게 들어오면, Dto의 getter를 자동으로 찾아서 대입해준다고 한다.
실제로 getter 메서드를 주석처리하고 실행시켜보았다.
BadSqlGrammarException, SQLSyntaxErrorException 에러가 났다.
이렇게 게터를 사용해서 대입이 되는 것은 몰랐는데 신기하다.
마이바티스 공부를 제대로 해야겠다 .. ㅠ
추후에 이렇게 동작하는 원리를 자세히 알아보도록 해야겠다.
'DB > Database' 카테고리의 다른 글
[Redis] Redis 라이브러리 3종 비교 (Spring redis vs Lettuce vs Redisson) (0) | 2024.07.28 |
---|---|
[Redis] CentOS8에 redis 설치 및 springboot 연동하기 (0) | 2024.06.27 |
[MySQL] 계층형 조회 (Recursive 재귀 쿼리) (1) | 2024.01.09 |
MariaDB / DBeaver 에서 컬럼 Auto increment 숫자 변경 (0) | 2023.11.30 |
MariaDB / DBeaver 에서 컬럼 Auto increment 설정하기 (0) | 2023.11.29 |