Mybatis映射文件Mapper.xml中#和$的区别

1、"#"

 简单来说"#"在编译时使用"?"占位符标记,可以有效防止参数注入,相当于我们使用JDBC操作时的PreparedStatement。

2、"$" 

直接把参数拼接到SQL中执行相当于JDBC操作时的Statement

3、参数作为非SQL关键字传递


        insert into users values(default, "${username}", "${password}", "${photo}");

或者把"$"改成"#"


        insert into users values(default, #{username}, #{password}, #{photo});
 

4、参数作为关键字传递,比如查询条件全是由参数拼接的,只是用一条SQL,有时要按name列查,有时要按age列查

SQL1:select * from users where username = "test";

SQL2:select * from users where userage like "%2";

因为列名和关系条件是关键字,是用"$",列值是非关键字,使用"#"。

三、总结

1、关键字作为参数,使用"$",两边不加""。

2、非关键字作为参数,使用"#"防注入。

其他情况优先使用"#"

你可能感兴趣的:(Mybatis映射文件Mapper.xml中#和$的区别)