mybatis中xml文件的${}和#{}区别

之前的笔记:#{}相当于JDBC的?

${}是字符串连接符,如果入参为普通类型{}中只写value

在项目中要实现所有业务批量提交的功能,实现方式,把表名,表主键字段当做参数传递,在xml文件中全部使用的#{},导致解析的时候出现问题。


1 #是将传入的值当做字符串的形式, eg:select id,name,age from student where id
=#{id},当前端把 id 值 1,传入到后台的时候,就相当于 select id,name,age from student
where id ='1'.
2 $是将传入的数据直接显示生成 sql 语句, eg:select id,name,age from student where
id =${id},当前端把 id 值 1,传入到后台的时候,就相当于 select id,name,age from
student where id = 1.
3 使用#可以很大程度上防止 sql 注入。 (语句的拼接)
4 但是如果使用在 order by 中就需要使用 $.或传入表名, 因为表名不能带引号(可以带
`tablename`,小撇)
5 在大多数情况下还是经常使用#,但在不同情况下必须使用$.
我觉得#与的区别最大在于: #{} 传入值时, sql 解析时,参数是带引号的,而的区别最大
在于: #{} 传入值时, sql 解析时,参数是带引号的,而{}穿入值, sql 解析时,参数是不
带引号的。
#{ }:解析为一个 JDBC 预编译语句(prepared statement)的参数标记符。预编译,重复
利用,效率高

原文地址:https://www.cnblogs.com/w123w/p/10644117.html