MyBatis学习03_#{}和${}区别以及使用
#{} :#{} 是以预编译的形式,直接将参数设置到sql语句中; 使用PreparedStatement的sql封装方法:设置了占位符为"?",可以有效地防止sql注入.
<!--select * from sysuser where uname like '%${uname}%'--> <select id="selectUserLikeName" resultType="com.shangma.cn.entity.Sysuser"> select * from sysuser where uname like '%' #{uname} '%' </select> <!-- select * from sysuser where uid = #{arg0} and uname like '%' #{arg1} '%'--> <select id="selectUserByIdAndName" resultType="com.shangma.cn.entity.Sysuser"> select * from sysuser where uid = #{param1} and uname like '%' #{param2} '%' </select>
${} :不能防止sql注入 :一般排序使用,排序字段或者表名(很少使用)
<select id="selectList" resultType="com.shangma.cn.entity.Sysrole"> select * from sysrole order by ${sortedField} ${sorted} </select>
sql注入:在执行sql的时候。 如果使用的是${},用户输入的内容直接拼在sql语句上,这样就有可能拼成一条语法正确的sql,但是不符合我们要执行的sql
相关扩展:
sql注入,一个例子让你知道什么是sql注入cuikai_ii的博客-CSDN博客sql注入例子
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话