mybatis中 ${}和#{}的区别 以及底层原理
程序员文章站
2022-04-01 19:41:30
${}: 不会自动加 ' ',如果传入参数为简单类型,那么必须写 ${value},如果是对象,写的是${属性名}; 底层解析的时候只要sql语句包含 ${ } ,在创建cofigration对象的时候,这条sql就会被解析成动态类型的语句,底层不会把 ${ } 转成 ?(不做处理),只会在使用Mapper接口代理对象进行数据操作的时候把#{ }转成 ?,把${ }转成mapper接口的参数值,所以会存在SQL注入的问题#{}: 对于字符串会自动加 ' ',如果传入参数为简......
${}:
不会自动加 ' ',如果传入参数为简单类型,那么必须写 ${value},如果是对象,写的是${属性名};
底层解析的时候只要sql语句包含 ${ } ,在创建cofigration对象的时候,这条sql就会被解析成动态类型的语句,底层不会把 ${ } 转成 " ? "(不做处理),只会在使用Mapper接口代理对象进行数据操作的时候把#{ }转成 " ? ",之后再调用JDBC进行赋值,把${ }转成mapper接口的参数值,所以会存在SQL注入的问题
#{}:
对于字符串会自动加 ' ',如果传入参数为简单类型,可以写 ${任意值},如果是对象,写的是${属性名}
底层解析的时候如果sql语句只包含 #{ } ,这条sql就会被解析成静态类型的语句,会把 #{ }转成 " ? ",进行数据操作时调用JDBC进行赋值
本文地址:https://blog.csdn.net/hjfalz/article/details/108963673
推荐阅读