🌱Spring:: like 오퍼레이터 Integer에 적용하기? 가능?(수정완료)
결론부터 말하자면 그대로는 안됩니다. 삽질 진짜 많이함...
그럼? 캐스팅(CONVERT 쓸거임)해서 할 수 있어요.
예를들어서,
DB 짤때 '학교 코드(college)'를 'Integer'로 해서 짰다고 해봅시다.
이때 학교코드가 123이면 1만 검색해도 123이 나오게 하고 싶잖아요?
이게 like만 가지고는 안됩니다. 요컨대
1
|
List<Student> findAllByCollegeIdLike(Integer college);
|
cs |
이렇게는 안된다는 말임. 왜? like operator는 Integer같은 number형에는 안되거든...... 문자만 됩니다.
그럼 어떡하라고.
아래와 같이 날쿼리를 써야됩니다.
1
2
|
@Query("SELECT college FROM College college WHERE CONVERT(college.collegeId, CHAR(10)) LIKE %:collegeId% ")
List<College> findAllByCollegeIdLike(Character collegeId);
|
cs |
이렇게 하면
1) college를 필드를 CHAR로 캐스트해주고
2) LIKE %:collegeId%는 collegeId 필드에서 내가 찾고자 하는 특정 숫자를 포함하는 경우를 다 찾아줍니다!!
물론 이때 비즈니스 코드도 변경이 필요합니다.
1) 이렇게 하든지
+ 이때 int를 char로 바꿔야 하므로 line 1~2에서 그 과정이 수반됩니다.
1
2
3
|
int radix = 10; //10진수
char college_id_char = Character.forDigit(college_id, radix);
colleges = collegeRepository.findAllByCollegeIdLike(college_id_char);
|
cs |
2) controller에서 college_id param 자체를 Integer에서 Character로 바꾸든지. 근데 이러면 db에서 긁어올때 귀찮아져서 추천하지 않음.
암튼 뭐.. 이건 알아서 하면 됩니다.
이제 결과 조회해볼건데
예를들어 college_id에 1이 포함된 학교를 모두 찾고싶다!!!! 싶으면
http://localhost:8080/admin/students/search_by_keyword?page=1&searchType=3&college_id=1
이렇게 보내겠져
그러면
이렇게 다 찾아집니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
{
"rc": 1,
"count": 2,
"students": [
{
"student_id": 92000001,
"name": "이름",
"age": "10",
"college": 123
},
{
"student_id": 92000002,
"name": "나다",
"age": "20",
"college": 1
}
]
}
|
cs |
ㅠㅠ감격