sql中#與$的區別


一 、在這里用到了#{},使用#時:

1、用來傳入參數,sql在解析的時候會加上” “,當成字符串來解析 ,如這里 role_id = “roleid”;

2、#{}能夠很大程度上防止sql注入;

延伸:

1、用{roleId,jdbcType=INTEGER},那么sql在解析的時候值為roleId = roleId,執行時會報錯;

2、${}方式無法防止sql注入;

3、$一般用入傳入數據庫對象,比如數據庫表名;

4、能用#{}時盡量用#{};

注意:

mybaties排序時使用order by 動態參數時需要注意,使用${}而不用#{};

 

二、主要區別就是#帶雙引號,$不帶

例如:#{id}代表'id',${id}代表id

 

下面是Mybatis @Select注解方式的sql

@Select("select id,name from user where id=#{id}")
public User getUser(@Param("id")long id);

@Select("select id,name from user where id=${id}")
public User getUSer(@Param("id")long id);

如果id傳入為1,則實際sql為

select id,name from user where id='1'

select id,name from user where id=1

Mybaits方法有一種情況

@Select("select id,name from user where id=#{id}")
public User getUser(@Param("id") long id);

@Select("select id,name from user where id=#{id}")
public User getUser(long id);

第二種因為傳一個參數是可以省略@Param("")的,但是這種情況下不能使用${},

傳兩個參數以上時,必須要寫@Param("")

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM