1.${} 的用法的 mapper 文件配置:
</select>
<select id="selById2" resultType="com.susu.pojo.People" parameterType="com.susu.pojo.People">
select * from people where id = ${id}
</select>
测试的 java 代码:
People people = new People();
people.setId(1);
People one = session.selectOne("com.susu.mapper.PeopleMapper.selById2", people);
System.out.println(one);
运行效果:
可以看到,合成的 sql 是: select * form people where id = 1
2.#{} 用法的 mapper 文件配置:
</select>
<select id="selById2" resultType="com.susu.pojo.People" parameterType="com.susu.pojo.People">
select * from people where id = #{id}
</select>
运行效果:
总结 #{} 和 ${} 的区别
- 无论是 #{} 还是 ${},都会根据括号中的内容 id,去参数 com.susu.pojo.People 去找相应的 get 方法,从而从参数对象获取相应的值,来赋值给 sql 的 id 字段
- 不同点在于,${} 的底层实现是 字符串拼接合成 sql 的方式;而 #{} 的底层实现则是使用 占位符 的方式,
- #{} 获取参数的内容支持 索引 获取,比如 #{0}。也可以使用 param1 方式 获取指定位置参数,并且 sql 语句使用?占位符处理
- {内容} 的 get/set 方法,如果大括号中写的是数字,则取到的数值就是该数字。
- 如果在 xml 文件中出现”<”, “>”,双引号等特殊字符时,可以使用 XML 文件转义符(XML 自身的转义标签)