千家信息网

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

发表于:2024-11-28 作者:千家信息网编辑
千家信息网最后更新 2024年11月28日,这篇文章主要介绍了MyBatis中的#{}和${}有什么区别,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言在MyBatis 的映射
千家信息网最后更新 2024年11月28日MyBatis中的#{}和${}有什么区别

这篇文章主要介绍了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'

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

    单个参数的情形

    #{}

    ${}


    多个参数的情形 #{}


    ${}


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

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

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

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

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

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

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

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

    0