zoukankan      html  css  js  c++  java
  • sql中#与$的区别

    一 、在这里用到了#{},使用#时:

    1、用来传入参数,sql在解析的时候会加上” “,当成字符串来解析 ,如这里 role_id = “roleid”;

    2、#{}能够很大程度上防止sql注入;

    延伸:

    1、用{roleId,jdbcType=INTEGER},那么sql在解析的时候值为roleId = roleId,执行时会报错;

    2、${}方式无法防止sql注入;

    3、$一般用入传入数据库对象,比如数据库表名;

    4、能用#{}时尽量用#{};

    注意:

    mybaties排序时使用order by 动态参数时需要注意,使用${}而不用#{};

    二、主要区别就是#带双引号,$不带

    例如:#{id}代表'id',${id}代表id

    下面是Mybatis @Select注解方式的sql

    @Select("select id,name from user where id=#{id}")
    public User getUser(@Param("id")long id);

    @Select("select id,name from user where id=${id}")
    public User getUSer(@Param("id")long id);

    如果id传入为1,则实际sql为

    select id,name from user where id='1'

    select id,name from user where id=1

    Mybaits方法有一种情况

    @Select("select id,name from user where id=#{id}")
    public User getUser(@Param("id") long id);

    @Select("select id,name from user where id=#{id}")
    public User getUser(long id);

    第二种因为传一个参数是可以省略@Param("")的,但是这种情况下不能使用${},

    传两个参数以上时,必须要写@Param("")

  • 相关阅读:
    LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    RTSP可用网络流
    Linux访问Github缓慢
    Ubu18.0-NVIDIA显卡驱动重装
    FFMPEG第一次学习
    QT-守护程序
    QT-局域网探测工具(简易版)--Ping
    QT-notepad++仿写
    Ubuntu 解压文件
    Ubuntu -换源
  • 原文地址:https://www.cnblogs.com/xxl910/p/12713904.html
Copyright © 2011-2022 走看看