在Mybatis简单入门的博客中,已经简单的看出#与$的区别,本文具体介绍它们的区别。
#
1. #{}可以防止sql注入,拿到值拼装sql时,会自动添加单引号,形参为单个的简单类型时可以随意填写。
2. #{} 传入值时,sql解析时,参数是带引号的。
3. #{}: 解析为一个 JDBC 预编译语句(prepared statement)的参数标记符,一个 #{ } 被解析为一个参数占位符 。
$
1. ${}则把拿到的值直接拼装进sql,可能会产生sql注入问题,需要单引号时必须手动添加,一般用于动态传入表名或字段名使用,形参只能是value。
2. ${}传入值,sql解析时,参数是不带引号的。
3. ${}: 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换。
#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换。#{}可以有效防止sql注入,提高系统安全性。 #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。
${}表示拼接sql串,通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换, ${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。
希望可以帮助到小伙伴们哟,如有不同意见,欢迎留言指正。望不吝赐教!!!