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中#{}和${}区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
- MyBatis中#{} 和 ${} 的区别和动态 SQL详解
- mybatis中${}和#{}的区别以及底层原理分析
- MyBatis #{}和${} |与数据库连接池使用详解
- MyBatis中使用#{}和${}占位符传递参数的各种报错信息处理方案
- Mybatis关于动态排序 #{} ${}问题
- mybatis中#{}和${}的区别详解
- mybatis中${}和#{}取值的区别分析
- MyBatis中#{}占位符与${}拼接符的用法说明
- 详解Mybatis中的 ${} 和 #{}区别与用法
- Mybatis之#{}与${}的区别使用详解
- Mybatis中#{}与${}的区别详解
- MyBatis中 #{} 和 ${} 的区别小结
相关文章
SpringBoot集成ip2region实现ip白名单的代码示例
ip2region v2.0 - 是一个离线IP地址定位库和IP定位数据管理框架,10微秒级别的查询效率,提供了众多主流编程语言的 xdb 数据生成和查询客户端实现,本文介绍了SpringBoot集成ip2region实现ip白名单的代码工程,需要的朋友可以参考下2024-08-08IDEA巧用Postfix Completion让码速起飞(小技巧)
这篇文章主要介绍了IDEA巧用Postfix Completion让码速起飞,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-08-08Java环境中MyBatis与Spring或Spring MVC框架的集成方法
和MyBatis类似,Spring或者Spring MVC框架在Web应用程序的运作中同样主要负责处理数据库事务,这里我们就来看一下Java环境中MyBatis与Spring或Spring MVC框架的集成方法2016-06-06
最新评论