相同点:如果传入的是基本类型,那么括号里的变量名称可以随意命名。
如果传入的是pojo对象,那么括号中的变量名称必须是pojo的属性名称。
不同点:#{} 占位符,占位
${} 拼接符,字符串原样拼接
能用#{} 的尽量少用 ${} (因为${}不能防止sql注入)
如果使用order by 动态参数时需要使用 ${} ,因为使用${} 传的参数不带引号(比如 order by user_id),而通过#{}传的参数会带引号(比如order by “user_id” )
如果parameterType是int时,sql语句中必须用 #{}
<select id="findUserByUserName" parameterType="string" resultType="project.book.pojo.User">
select * from User where username like '%${value}%'
</select>
<select id="findById" parameterType="int" resultType="project.book.pojo.User">
select * from User where id=#{id}
</select>
<select id="getUserList" resultType="project.book.pojo.User">
SELECT * from User
<if test="id !=null">
ORDER BY ${id}
</if>
</select>