#{}和${}
#{}是对非字符串拼接的参数占位符,如果入参是简单的数据类型,#{}里可以任意写,但如果入参是对象类型,则#{}里必须是对象的成员变量的名称,#{}可以有效的防止sql注入- 传参大部分使用
#{}传参,它的底层使用的是PreparedStatement对象,是安全的数据库访问,防止sql注入.(只有拼字符串的才有sql注入的风险) #{}里怎么写,看parameterType参数的类型如果
parameterType参数的类型是简单类型(8种基本(封装)+String),则#{}里面随便写<select id="getById" resultType="users" parameterType="int"><!--入参类型是简单类型-->--随便写select * from users where id=#{zar}</select>
parameterType参数的类型是实体类的类型,则#{}里面只能是类中的成员变量的名称,而且区分大小写<insert id="insertUsers" parameterType="users"><!--入参数实体类--> --成员变量名称 insert into users(username,birthday,sex,address) values(#{userName},#{birthday},#{sex},#{address}) </insert>
- 传参大部分使用
${}主要是针对字符串拼接替换,如果入参是基本数据类型,{}必须是对象的成员变量的名称。${}还可以替换列名和表名,存在sql注入风险,尽量少用
${}字符串拼接或字符串替换字符串拼接
- 一般用于
模糊查询中,建议少用,因为有sql注入的风险 也分俩种情况,同样的看
parameterType的类型如果
parameterType的类型是简单类型则${}里面随便写,但是分版本,如果是3.5.1以下的版本,只能写value<select id="getLikeByName" resultType="users" parameterType="string"><!--入参是简单类型--> --随便写 select * from users where username like "%${name}%" </select>如果
parameterType的类型是实体类的类型,则只能是类中成员变量的名称
- 一般用于
