MyBatis中#{}和${}有哪些区别
前言
在mybatis 的映射配置文件中,动态传递参数有两种方式:
1、#{} 占位符
2、${} 拼接符
#{} 和 ${} 的区别
区别1
#{} 为参数占位符 ?,即sql 预编译
${} 为字符串替换,即 sql 拼接
区别2、
#{}:动态解析 -> 预编译 -> 执行
${}:动态解析 -> 编译 -> 执行
区别 3、
#{} 的变量替换是在dbms 中
${} 的变量替换是在 dbms 外
区别 4、
变量替换后,#{} 对应的变量自动加上单引号''
变量替换后,${} 对应的变量不会加上单引号 ''
区别 5、
#{} 能防止sql 注入
${} 不能防止sql 注入
#{} 和 ${} 的实例:假设传入参数为 1
实例步骤一
#{}:select * from t_user where uid=#{uid} ${}:select * from t_user where uid= '${uid}'
实例步骤二
#{}:select * from t_user where uid= ? ${}:select * from t_user where uid= '1'
实例步骤三
#{}:select * from t_user where uid= '1' ${}:select * from t_user where uid= '1'
#{} 和 ${} 的大括号中的值
单个参数的情形
#{}
${}
多个参数的情形 #{}
${}
#{} 和 ${} 在使用中的技巧和建议
1、不论是单个参数,还是多个参数,一律都建议使用注解@param("")
2、 能用 #{} 的地方就用 #{},不用或少用${}
3、表名作参数时,必须用${}
。如:select * from ${tablename}
4、order by 时,必须用 ${}
。如:select * from t_user order by ${columnname}
5、表名处用#{}会直接报错;order by后面用#{}排序不生效
6、使用 ${} 时,要注意何时加或不加单引号,即${} 和 '${}'
。一般字段类型为char或者varchar时需要加单引号
总结
到此这篇关于mybatis中#{}和${}有哪些区别的文章就介绍到这了,更多相关mybatis中#{}和${}区别内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
上一篇: 笑侃世事,皆无虚言
下一篇: 超逗滴男女,有才的二货
推荐阅读
-
mysql中engine=innodb和engine=myisam的区别 (转)_MySQL
-
java中的sleep()和wait()的区别
-
PHP中new static() 和 new self() 的区别介绍_PHP
-
回车和换行有什么区别?我们平时按下的Enter键是回车还是换行
-
在javaScript中关于submit和button的区别介绍_基础知识
-
php中全等===和相等==的用法区别
-
php中return 、exit 、break和contiue四种结构的用法区别
-
VLAN的Hybrid和Trunk端口有何区别
-
php中的静态方法与实例方法有什么区别?解决方法
-
javascript中的onkeyup和onkeydown区别介绍_基础知识