• 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("")

  • 相关阅读:
    dir for RequestHandler and request
    python globals和locals
    Spring AOP(通知、连接点、切点、切面)
    Elasticsearch和Head插件安装(转)
    服务发现
    全面的软件测试( 转)
    软件开发项目人员配置
    阿里云oss缩略图如何产生读取 超简单 不看后悔(转)
    Elasticsearch模糊查询
    小米Pro 安装苹果系统
  • 原文地址:https://www.cnblogs.com/xxl910/p/12713904.html
Copyright © 2020-2023  润新知