一 、在這里用到了#{},使用#時:
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("")