mybatis中#{}与${}的区别
程序员文章站
2022-03-31 23:19:01
今天学习了下mybatis的查询,了解到了#{}与${}的区别, 配置文件如下: 总结: #{}表示占位符(转为?),可以防止SQL注入;如果输入参数类型是简单类型,输入参数名称可以是value或者其它任意名称 ${}表示拼接SQL(拼接参数),不能防止SQL注入;如果输入参数类型是简单类型,输入参 ......
今天学习了下mybatis的查询,了解到了#{}与${}的区别,
配置文件如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace隔离sql --> <mapper namespace="User"> <!-- id:statement的标识 --> <!-- #{}表示占位符(转为?),可以防止SQL注入;如果输入参数类型是简单类型,输入参数名称可以是value或者其它任意名称 --> <select id="getUserById" parameterType="int" resultType="org.pine.mybatis.po.User"> select * from user t where t.id = #{id} </select> <!-- resultType:单条记录的类型 --> <select id="listUserByUserame1" parameterType="java.lang.String" resultType="org.pine.mybatis.po.User"> select * from user t where t.username like #{username} </select> <!-- ${}表示拼接SQL(拼接参数),不能防止SQL注入;如果输入参数类型是简单类型,输入参数名称只能是value --> <select id="listUserByUsername2" parameterType="java.lang.String" resultType="org.pine.mybatis.po.User"> select * from user t where t.username like '%${value}%' </select> </mapper>
总结:
#{}表示占位符(转为?),可以防止SQL注入;如果输入参数类型是简单类型,输入参数名称可以是value或者其它任意名称
${}表示拼接SQL(拼接参数),不能防止SQL注入;如果输入参数类型是简单类型,输入参数名称只能是value
从SQL注入上来看,#{}有点类似于PreparedStatement,而${}有点类似于Statement
上一篇: 你TM闯我的红灯还少啊
下一篇: 淘宝代注册“扶贫App”项目被曝光
推荐阅读
-
探索 Reflect.apply 与 Function.prototype.apply 的区别
-
再谈Yii Framework框架中的事件event原理与应用
-
DB Oracle与Access在开发中的不同之处
-
IE6与IE7中,innerHTML获取param的区别_javascript技巧
-
批处理中Copy与Xcopy命令的区别小结
-
html中size和maxlength的区别
-
springboot工程中各个层次的作用+springboot连接数据库的工具汇总+Mybatis的开发方式/语法
-
JavaScript中:表达式和语句的区别[译]_javascript技巧
-
php 转换字符串编码 iconv与mb_convert_encoding的区别说明_PHP
-
请认真对待数据库中的char 与varchar