MyBtis之关于#{}和${}

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>

运行效果:

总结#{}和${}的区别

  1. 无论是#{}还是${},都会根据括号中的内容id,去参数com.susu.pojo.People去找相应的get方法,从而从参数对象获取相应的值,来赋值给sql的id字段
  2. 不同点在于,${}的底层实现是 字符串拼接合成sql 的方式;而#{}的底层实现则是使用 占位符 的方式,
  3. #{}获取参数的内容支持 索引 获取,比如#{0}。也可以使用 param1方式 获取指定位置参数,并且sql语句使用?占位符处理
  4. ${}使用字符串拼接方式,不使用?占位符,默认找${内容}的get/set方法,如果大括号中写的是数字,则取到的数值就是该数字。
  5. 如果在xml文件中出现”<”, “>”,双引号等特殊字符时,可以使用XML文件转义符(XML自身的转义标签)

注: ${}很少用,几乎不用!

原文地址:https://www.cnblogs.com/suhaha/p/11794128.html