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
반응형
'개발자 전향 프로젝트' 카테고리의 다른 글
[JAVA] JPA 활용법 -2 (QueryDSL 활용해보기) (0) | 2022.12.06 |
---|---|
자주 쓰이는 Ajax 활용법 - 부분 갱신 feat.@ResponseBody (0) | 2022.11.21 |
프레임워크와 라이브러리의 차이가 뭔가요? [ 면접 질문 ] (0) | 2022.10.29 |
[SpringBoot Data JPA] 중복은 있을 수 없어 -1 (0) | 2022.10.26 |
[JAVA] JPA 활용법 -1 (QueryDSL 적용해보기) (0) | 2022.10.24 |