MyBatis의 # 번호와 달러 기호의 차이

1750 단어 mybatis달러#부호
#{변수명}은 미리 컴파일하고 형식이 일치하는 작업을 할 수 있으며, #{변수명}은 jdbc의 형식으로 바뀔 수 있습니다.

select * from tablename where id = #{id}
만약에 id의 값이 12라고 가정하면 데이터베이스 필드 id가 문자형이면 #{id}는'12', 만약에 id가 정형이라면 id는 12이고 MyBatis는 위의 SQL 문장을 jdbc의 select * from tablename where id=?,자루매개 변수는 id의 값으로 설정됩니다.
${변수 이름} 데이터 형식이 일치하지 않고 바로 바꿉니다.

select * from tablename where id = ${id}
필드 id가 정형이면 sql 문장이 틀리지 않지만, 필드 id가 문자형이면 sql 문장을 써야 합니다.

select * from table where id = '${id}'
# 방식은 sql 주입을 어느 정도 방지할 수 있다.
$방식은 sql 주입을 할 수 없습니다.
$방식은 일반적으로 데이터베이스 대상을 전송하는 데 사용되며, 예를 들어 테이블 이름을 전송하는 데 사용된다.
가능한 한 #방식을 많이 사용하고 $방식을 적게 사용하세요.
mybatis 프레임워크는 반자동화된 지구층 프레임워크로서 그 sql 문장은 우리가 수동으로 작성해야 한다. 이럴 때 당연히 sql 주입을 방지해야 한다.사실 Mybatis의 sql은'입력+출력'기능을 가지고 함수와 유사한 구조로 다음과 같다.

select id="getBlogById" resultType="Blog" parameterType=”int”>
select id,title,author,content 
from blog where id=#{id} 
</select>
여기,parameterType은 입력한 매개 변수 형식을 표시하고,resultType은 출력된 매개 변수 형식을 표시합니다.위의 문장에 응답합니다. 만약 우리가 sql 주입을 방지하려면 당연히 매개 변수를 입력하는 데 힘을 써야 합니다.위 코드의 하이라이트 부분은 바로 매개 변수가 sql에서 연결된 부분을 입력하여 매개 변수를 전송한 후 실행된 sql 문장을 출력하면 sql가 이렇다는 것을 볼 수 있습니다.

select id,title,author,content from blog where id = ?
어떤 파라미터를 입력하든지 간에 인쇄된 sql은 모두 이렇다.이것은 mybatis가 사전 컴파일링 기능을 사용하기 때문에 sql가 실행되기 전에 위의 sql를 데이터베이스에 전송하여 컴파일합니다. 실행할 때 직접 컴파일된 sql를 사용하여 자리 차지 문자'?'를 대체합니다.됐어.sql 주입은 번역 과정에만 작용할 수 있기 때문에 이런 방식은 sql 주입 문제를 잘 피할 수 있다.
위에서 말한 것은 편집자가 여러분께 소개한 MyBatis의 #번호와 달러 기호의 차이입니다. 여러분께 도움이 되었으면 합니다. 만약에 궁금한 것이 있으면 저에게 메시지를 남겨 주십시오. 편집자는 제때에 여러분에게 회답할 것입니다.여기에서도 저희 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기