개발자 전향 프로젝트
[마이바티스+오라클] 검색할 때 종종 막히는 바인딩 변수
샘오리
2022. 11. 7. 11:12
728x90
반응형
오라클 DB와 MyBatis 를 사용하면서 검색 로직을 구현하려고 하면
- 어떻게 사용자가 입력한 값을 파라미터에 담아 매퍼에 넘기고 매퍼가 그걸 어떻게 받는지
- 어떻게 대소문자 구분 없이 (Case Insensitive) 값을 찾게 설정하는지
- 어떻게 파라미터를 포함하는 모든 값을 조회할 수 있게 % 를 넣을 수 있는지
요 3가지를 주로 고민하게 된다
오늘은 초보자들이 이러한 고민의 해답을
다른 블로그에서 찾기가 어려워서 이 글에서 쉽게 설명해볼까 한다.
먼저 컨트롤러에서 서비스로 제대로 호출했다고 가정하고 서비스는 아래와 같이 진행되어야 한다.
public List<DTO 이름> findBySearchValue(파라미터 타입 파라미터 이름) {
// Map으로 파라미터를 담아서 보내주는 방법
Map<데이터 타입(키), 데이터 타입(밸류)> 참조변수 = new HashMap<데이터 타입(키), 데이터 타입(밸류)>();
param.put("파라미터 이름", 파라미터 이름);
SqlSession sqlSession = CmmUtil.getSqlSession(false);
List<DTO 이름> Sessionlist = sqlSession.selectList("매퍼명.ID", 참조변수);
sqlSession.close();
return Sessionlist;
}
아래는 BIND SYNTAX이다.
사용자가 입력한 값을 담은 파라미터가 pattern이라는 바인드 신택스에 담기게 되고 나중에 이 파라미터 값을 불러오고 싶을 때 이 pattern이라는 녀석만 잘 호출해주면 되는 것이다.
이 신택스는 재활용이 가능하며 커스터마이징도 용이하다.
<bind name="pattern" value="'%' + 파라미터 이름 + '%'" />
아래는 예시이다.
<mapper namespace="매퍼이름">
<select id="ID명" parameterType="hashMap" resultType="DTO 경로">
<bind name="pattern" value="'%' + 파라미터 이름 + '%'" />
SELECT * FROM 테이블 이름 WHERE UPPER(칼럼명) LIKE UPPER(#{pattern})
</select>
참고로 파라미터 타입이 위 예시에는 hashMap이었기 때문에 아래도 hashMap인 것이지
사용자의 입맛에 따라 바뀔 수 있다.
그 말은 위 service의 예시 처럼 map을 사용하지 않아서 선언 및 초기화도 하지 않으며
매개변수를 받은 그대로 매퍼로 바로 넘겨 줄 수 있다는 것이다.
아래는 예시이다.
public List<DTO 이름> findBySearchValue(String 파라미터 이름) {
SqlSession sqlSession = CmmUtil.getSqlSession(false);
List<DTO 이름> Sessionlist = sqlSession.selectList("매퍼명.ID", 파라미터 이름);
sqlSession.close();
return Sessionlist;
}
아래 보이는 것 처럼 파라미터 타입이 String으로 설정된 것을 확인할 수 있다.
<mapper namespace="매퍼이름">
<select id="ID명" parameterType="String" resultType="DTO 경로">
<bind name="pattern" value="'%' + 파라미터 이름 + '%'" />
SELECT * FROM 테이블 이름 WHERE UPPER(칼럼명) LIKE UPPER(#{pattern})
</select>
끗
728x90
반응형