mybatis中#{}和${}的区别与用法
两者区别
#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换。 #{}可以有效防止sql注入。 如果parameterType传输单个简单类型值或是属性值,#{}括号中可以是value或其它名称。
${}表示拼接sql串,通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换, 如果parameterType传输单个简单类型值,${}括号中只能是value。
两者用法
#{} 用法
<select id="findUserByUsername" parameterType="String" resultType="com.scarecrow.javabean.User">
select * from user where username like "%"#{v}"%"
</select>
${}用法
<select id="findUserByUsername" parameterType="String" resultType="com.scarecrow.javabean.User">
select * from user where username like "%${value}%"
</select>
测试类
@Test
public void run2() throws IOException{
InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.findUserByUsername("五");
for(User user2 : users){
System.out.println(user2);
}
}