栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis动态SQL(四)-#{}和${}的区别

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mybatis动态SQL(四)-#{}和${}的区别

#{}和${}的区别
  • `${}`参数占位符解析过程
  • 总结

${}参数占位符解析过程

当动态SQL配置中存在${}参数占位符时,MyBatis会使用TextSqlNode对象描述对应的SQL节点,在调用TextSqlNode对象的apply()方法时会完成动态SQL的解析
也就是说,${}参数占位符的解析是在TextSqlNode类的apply()方法中完成的

在TextSqlNode类的apply()方法中,首先调用createParser()方法 创建一个 GenericTokenParser对象
通过 GenericTokenParser对象 解析${}参数占位符,然后通过 BindingTokenParser对象 处理 参数占位符的内容

createParser()方法返回一个 GenericTokenParser对象,指定 openToken属性为${,closeToken属性为},TokenHandler(入参)为BindingTokenParser对象

GenericTokenParser对象的parse方法 遍历获取所有${}参数占位符的内容,然后调用 BindingTokenParser对象的handleToken()方法 对 参数占位符内容 进行替换

在BindingTokenParser类的handleToken()方法中,根据参数占位符名称获取对应的参数值,然后替换为对应的参数值

总结

使用#{}参数占位符时,占位符内容会被替换成?,然后通过PreparedStatement对象的setXXX()方法为参数占位符设置值
${}参数占位符内容会被直接替换为参数值

使用#{}参数占位符能够有效避免SQL注入问题,所以可以优先考虑使用#{}占位符,当#{}参数占位符无法满足需求时,才考虑使用${}参数占位符

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/658403.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号