mybatis中#和$的区别
Posted 我的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis中#和$的区别相关的知识,希望对你有一定的参考价值。
简单点来说就是 #相当于数据加上了双引号,$相当于直接显示数据。
比如 orde by #user_id#,如果传入的是11,那么会被解析为order by "111",如果传入的是id,则解析成的sql 为 order by “id”,order by $user_id$,如果传入的是111,那么解析成 sql,则为 order by user_id,如果传入的是id,则解析为 orderby id。
1.使用#{}格式的语法在mybatis中使用Preparement语句来安全的设置值,执行sql类似下面的:
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1,id);
这样做的好处是:更安全,更迅速,通常也是首选做法。
2. 不过有时你只是想直接在 SQL 语句中插入一个不改变的字符串。比如,像 ORDER BY,你可以这样来使用:
ORDER BY ${columnName}
此时MyBatis 不会修改或转义字符串。
这种方式类似于:
Statement st = conn.createStatement(); ResultSet rs = st.executeQuery(sql);
这种方式的缺点是: 以这种方式接受从用户输出的内容并提供给语句中不变的字符串是不安全的,会导致潜在的 SQL 注入攻击,因此要么不允许用户输入这些字段,要么自行转义并检验。
以上是关于mybatis中#和$的区别的主要内容,如果未能解决你的问题,请参考以下文章
MyBatis增删改查(步骤详细,由浅入深,适合初学者,只看这一篇就够了)
mybatis javaType 和 jdbcType 区别