MyBatis中#{}和${}有哪些区别

 更新时间:2021年12月07日 10:16:05   作者:嫣红姹梓  
大家好,本篇文章主要讲的是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中#{}和${}有哪些区别的文章就介绍到这了,更多相关MyBatis中#{}和${}区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 实例分析java开启线程的方法

    实例分析java开启线程的方法

    在本文里我们通过实例给大家讲解了JAVA开启线程的方法和相关知识点,需要的朋友们跟着学习下。
    2019-03-03
  • JNDI在JavaEE中的角色_动力节点Java学院整理

    JNDI在JavaEE中的角色_动力节点Java学院整理

    这篇文章主要介绍了JNDI在JavaEE中的角色,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • SpringBoot集成ip2region实现ip白名单的代码示例

    SpringBoot集成ip2region实现ip白名单的代码示例

    ip2region v2.0 - 是一个离线IP地址定位库和IP定位数据管理框架,10微秒级别的查询效率,提供了众多主流编程语言的 xdb 数据生成和查询客户端实现,本文介绍了SpringBoot集成ip2region实现ip白名单的代码工程,需要的朋友可以参考下
    2024-08-08
  • 深入详解Java中synchronized锁升级的套路

    深入详解Java中synchronized锁升级的套路

    synchronized锁是啥?锁其实就是一个对象,随便哪一个都可以,Java中所有的对象都是锁,换句话说,Java中所有对象都可以成为锁。本文我们主要来聊聊synchronized锁升级的套路,感兴趣的可以收藏一下
    2023-04-04
  • java构造器 默认构造方法及参数化构造方法

    java构造器 默认构造方法及参数化构造方法

    构造器也叫构造方法、构造函数,是一种特殊类型的方法,负责类中成员变量(域)的初始化。构造器的用处是在创建对象时执行初始化,当创建一个对象时,系统会为这个对象的实例进行默认的初始化,下面文章将进入讲解,需要的朋友可以参考下
    2021-10-10
  • Java中Maven项目导出jar包配置的示例代码

    Java中Maven项目导出jar包配置的示例代码

    这篇文章主要介绍了Java中Maven项目导出jar包配置的示例代码,需要的朋友可以参考下
    2018-11-11
  • IDEA巧用Postfix Completion让码速起飞(小技巧)

    IDEA巧用Postfix Completion让码速起飞(小技巧)

    这篇文章主要介绍了IDEA巧用Postfix Completion让码速起飞,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Java环境中MyBatis与Spring或Spring MVC框架的集成方法

    Java环境中MyBatis与Spring或Spring MVC框架的集成方法

    和MyBatis类似,Spring或者Spring MVC框架在Web应用程序的运作中同样主要负责处理数据库事务,这里我们就来看一下Java环境中MyBatis与Spring或Spring MVC框架的集成方法
    2016-06-06
  • SpringBoot3实现优雅停机的完整流程

    SpringBoot3实现优雅停机的完整流程

    在现代微服务架构中,优雅停机(Graceful Shutdown)是一项重要功能,可以确保服务在关闭时处理完所有当前请求,避免突然终止连接或丢失数据,Spring Boot 3 提供了对优雅停机的内置支持,本文给大家介绍了SpringBoot3怎样优雅停机,需要的朋友可以参考下
    2024-10-10
  • SpringBoot2.0如何启用https协议

    SpringBoot2.0如何启用https协议

    这篇文章主要介绍了SpringBoot2.0如何启用https协议,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06

最新评论