>php教程 >PHP开发 >Mybatis에서 매개변수 전달 시 #{}과 ${}의 차이점과 #과 $의 차이점 요약

Mybatis에서 매개변수 전달 시 #{}과 ${}의 차이점과 #과 $의 차이점 요약

高洛峰
高洛峰원래의
2017-01-05 17:20:201375검색

최근 mybatis를 사용하고 있는데, 이전에 ibatis를 사용해본 적이 있습니다. 대체로 비슷하지만, 여전히 문제가 많이 발생합니다.

예를 들어 #{를 사용합니다. } 및 ${}를 사용하여 매개변수를 전달합니다. 차이점은

은 #을 사용하여 매개변수를 전달하는 것이며, SQL 문 구문 분석에서는 ""를 추가합니다. 예를 들어 name = #{name}인 테이블에서 *를 선택합니다. 전달된 이름은 Xiao Li이고 마지막에 인쇄됩니다. 하나는

name = 'Xiao Li'인 테이블에서 *를 선택하는 것이며 이는 문자열로 구문 분석될 것입니다. $, 그렇죠? #{} 매개변수를 전달하면 SQL 삽입이 방지될 수 있습니다. 전달하는 매개변수가 작은따옴표인 경우 ${}를 사용하면 이 메서드가 오류를 보고합니다.

또 다른 시나리오는 다음과 같습니다. 열별 정렬과 같은 동적 정렬을 수행하려면 이때 ${}를 사용해야 합니다. 왜냐하면 #{}를 사용하면 인쇄되는 내용이

select * from table order by가 되기 때문입니다. 'name'은 쓸모가 없습니다.

현재 #을 사용할 수 있으면 $를 사용하지 마세요.

mybatis에서 #과 $의 차이점

1. #들어오는 데이터를 하나의 문자열로 처리하면 자동으로 전달되는 데이터에 큰따옴표가 추가됩니다. 예를 들어 order by #user_id#, 전달된 값이 111이면 sql로 구문 분석할 때 값은 전달된 값이 id인 경우 order by "id"입니다. 🎜>

2. $는 SQL에서 들어오는 데이터를 직접 표시하고 생성합니다. 예: order by $user_id$, 전달된 값이 111이면 sql로 구문 분석할 때 값은 user_id별로 정렬됩니다. 전달된 값이 id이면 구문 분석된 sql은 id별로 정렬됩니다.


3. #method를 사용하면 SQL 삽입을 대폭 방지할 수 있습니다.


4. $ 메소드는 SQL 주입을 방지할 수 없습니다.

5. $ 메서드는 일반적으로 테이블 이름과 같은 데이터베이스 개체를 전달하는 데 사용됩니다.


6. #을 사용할 수 있으면 $를 사용하지 마세요.

MyBatis를 정렬할 때 동적 매개변수별 순서를 사용할 때는 #

문자열 대체

대신 $를 사용하는 것에 주의해야 합니다. 기본적으로 #{} 형식 구문을 사용하면 MyBatis가 전처리 명령문 속성을 생성하고 이에 대해 안전한 값(예: ?)을 설정하도록 합니다. 이는 안전하고 빠르며 선호됩니다. 때로는 변경되지 않은 문자열을 SQL 문에 직접 삽입하고 싶을 때도 있습니다. 예를 들어 ORDER BY처럼 다음과 같이 사용할 수 있습니다.

ORDER BY ${columnName}

여기서 MyBatis는 문자열을 수정하거나 이스케이프하지 않습니다.

중요: 사용자의 출력을 수락하고 이를 명령문에 변경할 수 없는 문자열로 제공하는 것은 안전하지 않습니다. 이는 잠재적인 SQL 주입 공격으로 이어지므로 사용자가 이러한 필드를 입력하도록 허용하거나 일반적으로 이스케이프하여 직접 확인해서는 안 됩니다.

Mybatis의 $와 #의 차이점에 대한 간략한 요약

얼마 전 저희 회사에 면접을 보러 오셨던 분이 있었는데, 저희 매니저님이 이런 질문을 하신 적이 있습니다. 그래서 저는 Baidu에 가서 조사를 했습니다.


사실 그 차이는 아주 간단합니다. SQL 문장 작성 - 예: select * from user_role where user_code = "100";


이 문장의 경우 select * from ${tableName} where user_code = #{userCode}를 작성해야 합니다.


그래서 $ 기호는 sql에 직접 표기하고, # 기호는 문자열 형태로 sql과 이어붙이게 됩니다.


Mybatis의 #{}와 ${} 매개변수의 차이점에 대한 더 많은 관련 기사와 #과 $의 차이점 요약을 보려면 PHP에 주목하세요. 중국사이트!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.