美文网首页
2020-12-21MyBatis中#{}和${}的区别

2020-12-21MyBatis中#{}和${}的区别

作者: 忆丶往 | 来源:发表于2020-12-21 10:58 被阅读0次

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

  • #{}:占位符

  • ${} :拼接符

2、#{} 和 ${} 的区别

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

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

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

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

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

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

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

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

    • 1)#{} 防止sql 注入 ->

    • 2)${} 防止sql 注入 -> 不能

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

  • ①开始
    • 1)#{}select * from t_user where uid=#{uid}

    • 2)${}select * from t_user where uid= '${uid}'

  • ②然后
    • 1)#{}select * from t_user where uid= ?

    • 2)${}select * from t_user where uid= '1'

  • ③最后
    • 1)#{}select * from t_user where uid= '1'

    • 2)${}select * from t_user where uid= '1'

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

  • ① 单个参数的情形
    • 1)#{}:无MyBatis 默认值,可任意,且与参数名无关
image image
  • 2)${}

  • <1> 使用 MyBatis 默认值 value,即 ${value}

image image
  • <2> 使用自定义参数名,前提:在映射器接口方法的参数前加注解@Param("")
image image
  • ② 多个参数的情形
    • 1)#{}

    • <1>使用MyBatis 默认值 arg0、arg1、arg2 … 或 param1、param2、param3 …

image image
  • <2> 使用自定义参数名,前提:在映射器接口方法的参数前加注解@Param("")
image image
  • 2)${}

  • <1> 使用MyBatis 默认值 arg0、arg1、arg2 … 或 param1、param2、param3 …

image image
  • <2> 使用自定义参数名,前提:在映射器接口方法的参数前加注解@Param("")
image image

注:@Param("")@Param(value="")的简写

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

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

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

(3)表名作参数时,必须用 ${}。如:

select * from ${tableName}

(4)order by时,必须用 ${}。如:

select * from t_user order by ${columnName}

(5)使用 ${} 时,要注意何时加或不加单引号,即 ${}'${}'


原博地址

相关文章

  • 2020-12-21MyBatis中#{}和${}的区别

    1、在MyBatis 的映射配置文件中,动态传递参数有两种方式: #{}:占位符 ${} :拼接符 2、#{} 和...

  • Linux中$()和${}的区别

    $():这个小括号里放的是命令,和``反引号作用一样,执行这个命令 ${}:这里面放的是变量,用来引用的

  • mybatis中#和$的区别

    一般来说,我们使用mybatis generator来生成mapper.xml文件时,会生成一些增删改查的文件,这...

  • MyBatis中#{}和${}的区别

    1.将Mapper.xml中的SQL语句解析为JDBC一个预编译指令时不同。 使用#{}时 这句SQL语句会被解析...

  • myBatis中#和$的区别

    在mybatis接口mapper文件中引用传入的参数是通过#{param}或者${param}来使用的。 1.数据...

  • Python中 is 和 == 的区别

    是不是很诧异,a, b都是‘hello’的时候is和==都是True,为什么是‘hello world’的时候就不...

  • Python 中 is 和== 的区别

    初学python的时候,发现python中== 用来比较两个string的值,之前用java的话,比较string...

  • js中 == 和 === 的区别

    今天看一些项目文档,找到了一个ele的node面试文档,里面总结了一些招聘问题,我感觉还是有点干货中文地址Engl...

  • python 中is和= = 的区别

    Python中的对象包含三要素:id、type、value 其中id用来唯一标识一个对象,type标识对象的类型,...

  • js中 !==和 !=的区别

    在使用var result = this.$storage.getSync('versionText');时,发现...

网友评论

      本文标题:2020-12-21MyBatis中#{}和${}的区别

      本文链接:https://www.haomeiwen.com/subject/ezqrnktx.html