• Mybatis中$和#的区别


    Mybatis中$和#的区别

    最近在修改Mybatis里面mapper文件的时候经常会遇到这样一个问题,到底该用$还是用#来传递值呢,现在做个区别。

    最明显的区别在于,#传入的时候会为其加上双引号,而$则是原样传值。

    这是因为#{}使用的是预编译语句, 采用的是占位符的形式,所以会加上引号,所以其参数默认为字符串,这样可以防止SQL注入。

    而${}则是原样传输,原来参数是什么样子就是什么样子。

    但是要注意当parameterType为Int的时候,也可以使用#{}。也要注意排序的时候,也就是用Order by的时候要采用$来,因为这样mysql才不会转义字符串。

    案例

    SELECT
    name
    FROM t_name
    WHERE add = #{add}
    

    这样传值就传入字符串,比如String add='上海',那么其sql语句就是add="上海".

    而$就用的就比较少了,一般用在order by和一些特殊情况,如下:

    SELECT name  FROM t_name
    where add LIKE CONCAT('%','${q}','%')
    ORDER BY ${sidx} ${sord}
    

    总结

    1、#自动加上引号,可以防止SQL注入;$原样传值,无法防止SQL注入

    2、常用#来传值;order by、传数据库对象(表名)、like concat常用$

  • 既然不能成为屠龙的勇士,那么就好好成为一名优秀的管家,为公主建设一个温馨美好的家。
    Since it can not become a dragon warrior, then it is a good housekeeper, for the princess to build a warm and beautiful home.

  • 相关阅读:
    电感
    电容
    电阻
    函数异常规格说明
    异常处理深度解析
    自定义内存管理
    单例类模板
    数组类模板
    数组类模板
    类模板深度剖析
  • 原文地址:https://www.cnblogs.com/ITflying/p/7261658.html
  • Copyright © 2020-2023  润新知