相同点:若是传入的是基本类型,那么括号里的变量名称能够随意命名。sql
若是传入的是pojo对象,那么括号中的变量名称必须是pojo的属性名称。对象
不一样点:#{} 占位符,占位字符串
${} 拼接符,字符串原样拼接get
能用#{} 的尽可能少用 ${} (由于${}不能防止sql注入)string
若是使用order by 动态参数时须要使用 ${} ,由于使用${} 传的参数不带引号(好比 order by user_id),而经过#{}传的参数会带引号(好比order by “user_id” ) test
若是parameterType是int时,sql语句中必须用 #{} 变量
<select id="findUserByUserName" parameterType="string" resultType="project.book.pojo.User">List
select * from User where username like '%${value}%'select
</select>sql语句
<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>