SentralLiu

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

相同点:都属于可以获取参数属性

#仅引用,在SQL语句中替代占位符的数值(赋值)

${attribute} 属于字符串拼接SQL,而非预编译占位符,会有注入攻击问题,不建议在常规SQL中使用,常用于可解决动态生降序问题。

但在动态表查询中会使用$

$符号注入攻击

<select id="selectUsersByKeyword" resultType="user">
	SELECT * FROM t_user
  	WHERE name = '${name}' <!-- 会存在注入攻击  比如传入参数是 【String name = "tom' or '1'='1";】-->
</select>

以下为查询动态表:

    // 演示一个$符号使用场景,动态表查询
    @Select("select * from ${tableName}") // <select>
    public List<Map<String,Object>> findData(@Param("tableName") String tableName);
        List<Map<String, Object>> list = mapper.findData("t_emp");
        for (Map<String, Object> map : list) {
            System.out.println(map);
        }

根据传递的表名不同,查询到不同的内容

 

posted on 2021-12-23 19:17  SentralLiu  阅读(71)  评论(0)    收藏  举报