美文网首页
mybatis中的字符串替换

mybatis中的字符串替换

作者: 潇豪 | 来源:发表于2019-10-03 16:51 被阅读0次

默认情况下,使用 #{} 格式的语法会导致 MyBatis 创建 PreparedStatement 参数占位符并安全地设置参数(就像使用 ? 一样)。 这样做更安全,更迅速,通常也是首选做法,不过有时你就是想直接在 SQL 语句中插入一个不转义的字符串。 比如,像 ORDER BY,你可以这样来使用:
ORDER BY ${columnName}
这里 MyBatis 不会修改或转义字符串。

当 SQL 语句中的元数据(如表名或列名)是动态生成的时候,字符串替换将会非常有用。 举个例子,如果你想通过任何一列从表中 select 数据时,不需要像下面这样写:

@Select("select * from user where id = #{id}")
User findById(@Param("id") long id);

@Select("select * from user where name = #{name}")
User findByName(@Param("name") String name);

@Select("select * from user where email = #{email}")
User findByEmail(@Param("email") String email);

// and more "findByXxx" method

可以只写这样一个方法:

@Select("select * from user where ${column} = #{value}")
User findByColumn(@Param("column") String column, @Param("value") String value);

其中 ${column} 会被直接替换,而 #{value} 会被使用 ? 预处理。 因此你就可以像下面这样来达到上述功能:

User userOfId1 = userMapper.findByColumn("id", 1L);
User userOfNameKid = userMapper.findByColumn("name", "kid");
User userOfEmail = userMapper.findByColumn("email", "noone@nowhere.com");

这个想法也同样适用于用来替换表名的情况。

提示 用这种方式接受用户的输入,并将其用于语句中的参数是不安全的,会导致潜在的 SQL 注入攻击,因此要么不允许用户输入这些字段,要么自行转义并检验。

相关文章

  • 【5分钟背八股】mybatis中#{}和${}的区别?

    mybatis中#{}和${}的区别是什么? a、#{}是预编译处理,${}是字符串替换。 b、Mybatis 在...

  • Mybatis中单双引号引发的惨案

    #{}与${}的区别 #{}是预编译处理,${}是字符串替换Mybatis在处理#{}时,会将sql中的#{}替换...

  • 13Mybatis

    1.mybatis 中 #{}和 ${}的区别是什么? {}是预编译处理,${}是字符串替换; Mybatis在处...

  • Mybatis

    一、Mybatis1、#{}和{}是字符串替换:Mybatis在处理{}替换成变量的值。使用#{}可以有效的防止S...

  • 21、mybatis其它

    一、#{} ${} 的区别 {}是预编译处理,${}是字符串替换。 mybatis在处理#{}时,会将sql中的#...

  • mybatis # $区别

    mybatis # $区别 MyBatis排序时使用order by 动态参数时需要注意,用$而不是# 字符串替换...

  • mybatis中的字符串替换

    默认情况下,使用 #{} 格式的语法会导致 MyBatis 创建 PreparedStatement 参数占位符并...

  • MyBatis基础面试题

    1、Mybatis 中 #{}和 ${}的区别是什么? 1)#{}是预编译处理,${}是字符串替换;2)#{}将传...

  • Mybatis中${}和#{}的区别和用法

    Mybatis的Sql语句传参有两种方式:#{}和¥{} #{}是预编译处理,${}是字符串替换。 Mybatis...

  • Android中string.xml应用

    配置字符串替换 单个字符串替换 使用Context方法,动态替换 多个个字符串替换 配置字符串中的空格

网友评论

      本文标题:mybatis中的字符串替换

      本文链接:https://www.haomeiwen.com/subject/yiidpctx.html