MyBatis中#{}和${}的差别转载

原创
小哥 3年前 (2022-10-28) 阅读数 7 #大杂烩

MyBatis 中 #{} 和 ${} 的区别

1、在MyBatis 有两种方式可以动态传递映射配置文件中的参数:

(1)#{} 占位符

(2)${} 拼接符

2、#{} 和 ${} 的区别

(1)

1)#{} 对于参数占位符 ?,即sql 预编译

2)${} 替换为一个字符串,即。 sql 拼接

(2)

1)#{}:动态解析 -> 预编译 -> 执行

2)${}:动态解析 -> 编译 -> 执行

(3)

1)#{} 变量替换已进入。DBMS 中

2)${} 变量替换已进入。 DBMS 外

(4)

1)在变量被替换之后,#{} 相应的变量会自动用单引号引起来。 ’

2)在变量被替换之后,${} 对应的变量没有用单引号引起来。

(5)

1)#{} 能防止sql 注入

2)${} 不能防止sql 注入

3、#{} 和 ${} 例如:假设传入参数为。 1

(1)开始

1)#{}:select * from t_user where uid=#{uid}

2)${}:select * from t_user where uid= ${uid}

(2)

1)#{}:select * from t_user where uid= ?

2)${}:select * from t_user where uid= 1

(3)最后

1)#{}:select * from t_user where uid= 1’

2)${}:select * from t_user where uid= 1

4、#{} 和 ${} 大括号中的值。

(1)单个参数的情况

1)#{}

无MyBatis 缺省值,任意且独立于参数名称

2)${}

<1>使用 MyBatis 默认值 value,即 ${value} <2>如果对映射器接口方法的参数进行了注释,则使用自定义参数名称。@Param("") (2)多个参数的情况 1)#{} <1>使用MyBatis 默认值 arg0、arg1、arg2 … 或 param1、param2、param3 … <2>如果对映射器接口方法的参数进行了注释,则使用自定义参数名称。@Param("") 2)${} <1>使用MyBatis 默认值 arg0、arg1、arg2 … 或 param1、param2、param3 … <2>如果对映射器接口方法的参数进行了注释,则使用自定义参数名称。@Param("") 注:@Param("") 是 @Param(value="") 的简写 5、#{} 和 ${} 使用中的提示和建议 (1无论是单参数还是多参数,建议使用注释。@Param("") (2)能用 #{} 使用这个地方 #{},请勿使用或少用 ${} (3当表名是参数时,必须使用它。 ${}。如:select * from ${tableName} (4)order by 必须使用。 ${}。如:select * from t\_user order by ${columnName} (5)使用 ${} 什么时候,注意什么时候加不加单引号,也就是。 ${} 和 ${} ———————————————— 版权声明:本文是CSDN博主「siwuxie095“原文,跟上。 CC 4.0 BY-SA 版权协议,转载请附上原始来源链接和本声明。 原始链接:https://blog.csdn.net/siwuxie095/article/details/79190856
版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除