mapper.xml动态表名

<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>

mapper.xml动态表名

mapper.xml动态表名
图一:
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

上一篇:五、自定义Mapper\六、自定义Service


下一篇:Python实现--CTF一些常用密码的编码解码功能!