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.

查看全文
  • 相关阅读:
    HBase Coprocessor 剖析与编程实践
    图数据库实践系列 (一)Neo4J简介与安装
    BootStrap入门教程 (三)
    图数据库实践系列 (三)Neo4j Spatial的REST集成
    BootStrap入门教程 (二)
    R与GIS实践系列Shapefile导入与地图显示
    空间分析读书笔记
    BootStrap入门教程 (四)
    Java并发之线程池的使用浅析
    RSA详解
  • 原文地址:https://www.cnblogs.com/ITflying/p/7261658.html
  • Copyright © 2011-2022 走看看