美文网首页
mybatis中的#{}和${} 2021-09-17

mybatis中的#{}和${} 2021-09-17

作者: 小沙坨 | 来源:发表于2021-09-17 12:52 被阅读0次

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

(1)#{} 占位符

(2)${} 拼接符

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

(1)

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

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

(2)

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

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

(3)

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

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

(4)

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

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

(5)

1)#{} 能防止sql 注入

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

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

(1)开始

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

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

(2)然后

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

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

(3)最后

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

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

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

(1)单个参数的情形

1)#{}

无MyBatis 默认值,可任意,且与参数名无关

image image

2)${}

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

image image

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

image image

(2)多个参数的情形

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)使用 {} 时,要注意何时加或不加单引号,即{} 和 '${}'

参考:https://blog.csdn.net/siwuxie095/article/details/79190856

相关文章

  • mybatis中的#{}和${} 2021-09-17

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

  • mybatis中#和$

    1、#{} 进行预编译,使用jdbc时的preparedStatement,转换成占位符例如:select * f...

  • Mybatis 详解

    [mybatis中"#"和"$"的区别]动态 sql 是 mybatis 的主要特性之一,在 mapper 中定义...

  • mybatis中#和$的区别

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

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

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

  • myBatis中#和$的区别

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

  • MyBatis中$和#的区别

    动态 SQL 是 mybatis 的强大特性之一,也是它优于其他 ORM 框架的一个重要原因。mybatis 在对...

  • Mybatis中#和$的区别

    tips:能用#的就别用$.Mybatis中进行参数传递,可以使用两种方式#{}或者${}其中,#{ } 解析为一...

  • MyBatis中#和$的区别

    MyBatis中使用parameterType向SQL语句传参,parameterType后的类型可以是基本类型i...

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

    1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如...

网友评论

      本文标题:mybatis中的#{}和${} 2021-09-17

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