개발/Spring

🌱Spring:: like 오퍼레이터 Integer에 적용하기? 가능?(수정완료)

hyuunii 2024. 2. 2. 16:05

결론부터 말하자면 그대로는 안됩니다. 삽질 진짜 많이함...

그럼? 캐스팅(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

ㅠㅠ감격