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 注入攻击,因此要么不允许用户输入这些字段,要么自行转义并检验。

posted @ 2017-08-21 18:39  一网瘾少年  阅读(134)  评论(0编辑  收藏  举报