温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

MyBatis中的#{}和${}有什么区别

发布时间:2021-12-07 11:33:36 来源:亿速云 阅读:177 作者:小新 栏目:开发技术

这篇文章主要介绍了MyBatis中的#{}和${}有什么区别,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

    前言

    在MyBatis 的映射配置文件中,动态传递参数有两种方式:

    1、#{} 占位符

    2、${} 拼接符

    #{} 和 ${} 的区别

    区别1

    #{} 为参数占位符 ?,即sql 预编译

    ${} 为字符串替换,即 sql 拼接

    区别2、

    #{}:动态解析 -> 预编译 -> 执行

    ${}:动态解析 -> 编译 -> 执行

    区别 3、

    #{} 的变量替换是在DBMS 中

    ${} 的变量替换是在 DBMS 外

    区别 4、

    变量替换后,#{} 对应的变量自动加上单引号''

    变量替换后,${} 对应的变量不会加上单引号 ''

    区别 5、

    #{} 能防止sql 注入

    ${} 不能防止sql 注入

    #{} 和 ${} 的实例:假设传入参数为 1

    实例步骤一

    #{}:select * from t_user where uid=#{uid}
    
    ${}:select * from t_user where uid= '${uid}'

    实例步骤二

    #{}:select * from t_user where uid= ?
    
    ${}:select * from t_user where uid= '1'

    实例步骤三

    #{}:select * from t_user where uid= '1'
    
    ${}:select * from t_user where uid= '1'

    #{} 和 ${} 的大括号中的值

    单个参数的情形

    #{}

    MyBatis中的#{}和${}有什么区别

    ${}

    MyBatis中的#{}和${}有什么区别
    MyBatis中的#{}和${}有什么区别

    多个参数的情形 #{}

    MyBatis中的#{}和${}有什么区别
    MyBatis中的#{}和${}有什么区别

    ${}

    MyBatis中的#{}和${}有什么区别
    MyBatis中的#{}和${}有什么区别

    #{} 和 ${} 在使用中的技巧和建议

    1、不论是单个参数,还是多个参数,一律都建议使用注解@Param("")

    2、 能用 #{} 的地方就用 #{},不用或少用${}

    3、表名作参数时,必须用${}。如:select * from ${tableName}

    4、order by 时,必须用 ${}。如:select * from t_user order by ${columnName}

    5、表名处用#{}会直接报错;order by后面用#{}排序不生效

    6、使用 ${} 时,要注意何时加或不加单引号,即${} 和 '${}'。一般字段类型为char或者varchar时需要加单引号

    感谢你能够认真阅读完这篇文章,希望小编分享的“MyBatis中的#{}和${}有什么区别”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI