Skip to content

Latest commit

 

History

History
43 lines (24 loc) · 2.58 KB

mybatis_-_parameter_.md

File metadata and controls

43 lines (24 loc) · 2.58 KB

mybatis 에서 동적 쿼리를 위한 여러개의 input parameter 처리

이번 Spring을 하면서 mybatis를 이용할 일이 생겼다. 그래서 간단하게 적어본다.

실제로 paging 처리를 하기위해서는 많은 예시가 있다.

근데 결국 paging처리를 하는데 있어서 SQL을 통한 처리를 하기로 했으므로 문제 해결방식은 여러가지가 있었다.

when을 통한 동적 쿼리 처리였는데, parameter를 받아서 처리하는 방식으로 처리하고 싶었다.

문제는 mybatis는 여러개의 parameter를 처리할수 없게끔 처리했다.

결국 우리가 service에서 이메소드를 늘려서 사용하고 싶지만, 실제로는 그렇게 할 수 없는 것이 DAO에서 sqlSession을통해서 실행시키기 때문이다.

Sqlsession에서 객체가 가진 메소드중 selectList 를 확인해보자면, 실제로 파라미터가 object 외에는 없다.

즉, 두개이상의 parameter를 못 넣는 구조로 설계가 되어있으므로 애초에 다수의 파라미터를 한개에 넣는 구조로 만들 수 밖에 없는 것이다.

조금 논점에 벗어난 이야기긴 하지만, 그래도 RowBound 라는 객체를 통해서 페이징 처리를 할 수가 있다.

RowBound는 특정갯수만큼의 레코드를 건너띄는 처리를해주게 한다. 그래서 페이징 처리가 되긴한다.

문제점이 하나 있는거 빼고는 그 문제점은 결국 몇개를 불러오는 가에 따라서 속도 차이가 생기게 되는데,

실제로 10000번째부터 보고 싶으면 데이터 자체를 10000개를 불러오고 10개를 띄우는 방식으로 처리가 되버린다.

실제로 모든 데이터를 다 끌어와서 안보이게 가려놓은 방식인 것

그래서 이런 경우를 배제하기 위해 다른 방안도 있다.

아래를 참고하자

링크

다시 본론으로 돌아와서

두개이상의 parameter를 못 넣는 구조로 설계가 되어있으므로 애초에 다수의 파라미터를 한개에 넣는 구조로 만들 수 밖에 없는 것이다.

라는 조건때문에 이 조건을 잘 활용하면 된다. 두개의 파라미터를 한 개의 파라미터에 넣는 방식은 Map을 이용하면 된다.

혹은 아예 VO에 넣어서 requestparameter를 vo를 넣고 이 문제를 처리하는 방식도 존재한다.

마지막으로 @param 을 통해서 파라미터 명을 인식시켜서 넣는 방식도 존재한다.