OGLN两种表达式的区别

在我们使用@Param(“id”)绑定一个参数时,Mybatis会暂时将它对应的值放在一个临时的参数池里面。
#{}以及$()都可以访问参数池。如果加上@Param(“id”),那么可以使用#{id}以以${id}去获得参数池里面的值。但是,如果没有@Param(“id”),那么参数池里面是没有id的值的。那么这个值只有#{}在参数中获得。而${id}只能在参数池获得数据,所以就无法获得。

#{}与${}的区别是:
1、${}只能在临时参数池获的数据,所以使用${key}必须要结合@Param使用。而#{}可以从参数池以及参数获得对应的值,并不需要@Param注解

2、#{key}用于设置PreparedStatement对象的?(问号)参数 的。所以它只能用于设置SQL参数,DDL操作,对数据库对象的增删改查,对象名是不可以使用#{key},如:

3、使用${key}用在DML、DQL的SQL语句的参数里面是不安全的,可能出现SQL被注入的问题。如:

非必要情况下尽量使用#{}

问题:那么${}有什么用呢?
答:注意基于JDBC的接口的原来的表名是不可以使用?的,?只能用于传入的参数。
如果操作的涉及表名这些非参数的 数据(表名,视图名)时,需要使用${}

原文地址:https://www.cnblogs.com/cdeelen/p/10841316.html