Mybatis order by 동적 전 참 에 나타 난 문제 및 해결 방법

문제 의 유래
현재 사용자 와 관련 된 데 이 터 를 정상 으로 보 여 주 는 간단 한 수요
여기 서 나 는 이 수 요 를 재현 하기 위해 간단 한 사용자 표를 사용 했다.

아주 간단 합 니 다.검색 어 뒤에 order by t.login_name='wulaoer' desc 을 더 하면 됩 니 다.
아래 와 같이 오 씨 둘 째 는 정상에 이 르 렀 다.

그럼 Mybatis 스 크 립 트 는 어떻게 쓰 죠?
이렇게 써 요.👇🏻

<select id="selectUserPageOrder" resultType="cn.fighter3.entity.User">
        select * from user t
        order by t.login_name=#{req.currentUser} desc
    </select>
OK,필요 완료,테스트,만 지기...
응,버그 가 났 어...
문제 현장
정 청 이 가 콘 솔 을 보 니 잘못 보고 했다.

가장 중요 한 줄:
java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
문제 분석
문 제 는 매우 간단 하 다.#{} #{} 은 사전 컴 파일 체 제 를 사용 하여 자리 표시 자 입 니 다.\#{}입력 매개 변 수 는 문자열 로 들 어 갑 니 다.SQL 의\#{}을 대체 합 니까?번호,Prepared Statement 의 set 방법 으로 값 을 부여 합 니 다.
이런 방식 으로 orderby 의 마지막 sql 은 작은 따옴표 를 더 추가 합 니 다.
그럼 어떻게 해결 하지?${} 사용 가능 합 니 다.${} 은 맞 춤 법 으로 직접 문자열 을 바 꿉 니 다.

 <select id="selectUserPageOrder" resultType="cn.fighter3.entity.User">
        select * from user t
        order by t.login_name=${req.currentUser} desc
    </select>
나 는 ${} 이라는 방식 을 사용 하고 싶 지 않다.왜냐하면 sql 주입 의 위험 이 있 기 때문에 어떻게 해 야 합 니까?
좋아,사실은 주로 이런 방식 도 잘못 보 고 했 어.😓。
java.sql.SQLSyntaxErrorException: Unknown column 'wulaoer' in 'order clause'
우 리 는 평소에 모호 한 조 회 를 어떻게 씁 니까?CONCAT() 함 수 를 사용 하여 키 워드 를 연결 합 니 다.
이런 식 으로 유추 하면 나 는 하나의 함수 로 ' 을 없 애 면 되 지 않 겠 는가?
그럼 어떤 함수 로 할 까요?
―― REPLACE그래서 쓰 는 방법 이 이렇게 되 었 다.

 <select id="selectUserPageOrder" resultType="cn.fighter3.entity.User">
        select * from user t
        order by t.login_name=REPLACE(#{req.currentUser},'\'','') desc
    </select>
문제 해결
OK,최종 문제 해결.

<select id="selectUserPageOrder" resultType="cn.fighter3.entity.User">
        select * from user t
        order by t.login_name=REPLACE(#{req.currentUser},'\'','') desc
    </select>
올 라 가자,오 둘째!

문 제 는 비교적 간단 하고 처리 하기 도 3 대 5 로 2 를 나 누 지만 분석 과정 이 좀 재 미 있 기 때문에 보 여 드 리 겠 습 니 다.
Mybatis order by 동적 전 참 에 나타 난 작은 bug 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.Mybatis order by 동적 전 참 에 나타 난 작은 bug 내용 에 대해 서 는 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기