9 #{}和${}的区别

张创琦 2022.03.13

1 #{}

{}:表示一个占位符,通知 Mybatis 使用实际的参数值代替。并使用 PrepareStatement 对象执行 sql 语句, #{…}代替sql 语句的“?”。这个是Mybatis 中的首选做法,安全迅速。

  1. <select id="queryById" parameterType="int" resultType="com.kkb.pojo.Team">
  2. select * from team where teamId=#{id}
  3. </select>
  4. <!--Mybatis执行的时候是:
  5. String sql="select * from team where teamId=?"; PreparedStatement ps = conn.prepareStatement(sql); ps.setInt(1,1001);
  6. where teamId=? 实际就是 where teamId=#{id}
  7. ps.setInt(1,1001) 中的1001会替换#{id}
  8. -->

2 ${}

9 #{}和${}的区别 - 图1包含的“字符串”替换所在位置。使用 Statement或者 PreparedStatement 把 sql 语句和 ${} 的内容连接起来。一般用在替换表名, 列名,不同列排序等操作。

测试案例放在第8个文档的 test05 和 test06 中了。

test06 为使用不同列作为查询条件。