MyBaits——SQL映射文件中'#{}'与'${}'的区别

#{}、${}

#{参数}:占位符;

参数类型:

1)、可以接受任意的基本数据类型;

注、当参数为基本数据数据类型时,占位符中的属性名可以随意写,但是建议为见明知意;

2)、可以接收pojo中的属性值;

注、当参数为pojo中的变量时,占位符中的属性名为pojo中所对应的变量名;

3)、可以通过HashMap设置;

注、当参数为pojo中的变量时,占位符中的属性名为集合中的键名;

${参数}:拼接符;

1)、可以接受任意的基本数据类型;

注、当参数为基本数据数据类型时,占位符中的属性名为value;

2)、可以接收pojo中的属性值;

注、当参数为pojo中的变量时,占位符中的属性名为pojo中所对应的变量名;

3)、可以通过HashMap设置;

注、当参数为pojo中的变量时,占位符中的属性名为集合中的键名;

${}、#{}区别:

执行sql的方式:

#{}:预编译sql,相当于PreparedStatement;

${}:不会进行预编译,相当于Statement;

安全性:

#{}:安全性高,不会发生sql注入;

${}:安全性不高,可能发生sql注入;

效率:

#{}:效率相对高;

${}:效率相对低;

数据类型:

#{}:不需要考虑数据类型(数据库类型与java类型之间)是否相同,MyBatis会自动转换数据类型;

${}:需要考虑数据类型;

参数:

当参数为基本数据类型时,占位符中可以使用任意变量接收,拼接符只能通过value变量接受;

你可能感兴趣的:(MyBaits——SQL映射文件中'#{}'与'${}'的区别)