<select id="xxx" resultMap="resultMap" statementType="STATEMENT">
SELECT
*
FROM
${join} a
where
a.xx = ${xx}
and a.xxx= ${xxx}
and a.del_flag = 0
</select>
图一:
String join 字段为 xml中的表名
因为#{}和${}的关系
传进去的字段都要转换一下,让字段前后带上""。例如:id…
#{}:预编译
select * from user where name = #{name};
变为
select * from user where name = ?;
#{}被解析为一个参数占位符?
${}:变量替换
select * from user where name = ${name};
变为
select * from user where name = name;
#{}与${}的区别可以简单总结如下:
- #{}将传入的参数当成一个字符串,会给传入的参数加一个双引号
- ${}将传入的参数直接显示生成在sql中,不会添加引号
- #{}能够很大程度上防止sql注入,${}无法防止sql注入
- ${}一般用于传输数据库的表名、字段名等
- 能用#{}的地方尽量别用${}
要实现动态调用表名和字段名,就不能使用预编译了,需添加statementType=“STATEMENT”" 。
statementType:STATEMENT(非预编译),PREPARED(预编译)或CALLABLE中的任意一个,这就告诉 MyBatis 分别使用Statement,PreparedStatement或者CallableStatement。默认:PREPARED。这里显然不能使用预编译,要改成非预编译。
作者:鲨鱼辣椒灬
来源:CSDN