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