zoukankan      html  css  js  c++  java
  • 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.

查看全文
  • 相关阅读:
    使用C#调用C++类库
    C# IntPtr类型
    C# 调用C++ dll string类型返回
    C# try、catch、finally语句
    C语言 char *、char []、const char *、string的区别与相互转换
    C# 字符串string与char数组互转!
    C#如何调用C++(进阶篇)
    Springboot通过过滤器实现对请求头的修改
    【spring事务】
    命令行参数库:McMaster.Extensions.CommandLineUtils【转】
  • 原文地址:https://www.cnblogs.com/ITflying/p/7261658.html
  • Copyright © 2011-2022 走看看