mybatis中#{}与${}的区别
程序员文章站
2022-07-08 19:24:37
今天学习了下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
下一篇: Java 常量池
推荐阅读
-
Android中Handler与Message的简单实例
-
浅谈Android onTouchEvent 与 onInterceptTouchEvent的区别详解
-
在CorelDRAW中的对象概述与选择对象技巧图解
-
Android编程中关于单线程模型的理解与分析
-
iOS应用中存储用户设置的plist文件的创建与读写教程
-
Vue中的methods、watch、computed的区别
-
Python中print和return的作用及区别解析
-
PHP中date与gmdate的区别及默认时区设置
-
Python中函数的基本定义与调用及内置函数详解
-
php中的路径问题与set_include_path使用介绍