最全!!! MyBatis的#{}和${}的区别和使用场景

  1. #{} 则是使用占位符的方式底层采用的是PreparedStatement,会预编译,因此不会产生SQL注入问题;
  2. #{}不会产生字符串拼接,${}会产生字符串拼接,因此${}会出现SQL注入问题;
  3. 变量替换后,#{} 对应的变量对于String类型会自动加上单引号 ‘’,其他类型不加;
  4. 因为#{} 对应的变量对于String类型会自动加上单引号 ‘’,所以在操作变量为表名或者字段名时 只能采用${}因为表名或者字段名不需要加单引号‘’;
  5. 类似上条规则,在order by下也只有可以用${} 不可以加单引号;
  6. 表名处用#{}会直接报错;列名处用#{}会查询不到数据;order by后面用#{}排序不生效
  7. 使用${}时,要注意何时加或不加单引号,即 ${}  '${}'。一般字段类型为char或者varchar时需要加单引号;
  8. 不论是单个参数,还是多个参数,一律都建议使用注解@Param(“”)
    当 SQL 语句中的元数据(如表名或列名)是动态生成的时候,字符串替换将会非常有用。 举个例子,如果你想 select 一个表任意一列的数据时,可以参考下方优化后的代码:
  9. //不好的写法
    @Select("select * from user where id = #{id}")
    User findById(@Param("id") long id);
    
    @Select("select * from user where name = #{name}")
    User findByName(@Param("name") String name);
    
    @Select("select * from user where email = #{email}")
    User findByEmail(@Param("email") String email);
    
    //(推荐)归纳统一的写法 结合${}和#{}
    @Select("select * from user where ${column} = #{value}")
    User findByColumn(@Param("column") String column, @Param("value") String value);
    
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卓@酌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值