相同點:若是傳入的是基本類型,那麼括號裏的變量名稱能夠隨意命名。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>