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("")

 

posted @ 2020-04-16 16:50  Steven徐  阅读(3420)  评论(0编辑  收藏  举报