#{}
#{属性名}
values(?,?,?)
赋值方式时预编译,是安全的,可以防止sql的sql的注入
例如:
insert into admin (account,password,sex) values (#{account},#{password},#{sex})
#{} 占位符,是经过预编译的,编译好 SQL 语句再取值,#方式能够防止 sql 注入
${}
${属性}
values(‘wasd’,‘123’,‘男’)字符串拼接的,它是不安全的
这个是无法执行的
insert into admin (account,password,sex) values (${account},${password},${sex})
这样才可以执行
insert into admin (account,password,sex) values ('${account}','${password}','${sex}')
就是以字符串拼接的方式进行的,所以可以执行。加单引号传递进去的是值,不加传递进去的是列名
${}多是用于传列名,而不是传递数据,查询出来的是一列的数据
select $(one),$(two) from admin order by $(column)
是将column这一列的数据查询出来
$ {} 拼接符,会传入参数字符串,取值以后再去编译 SQL 语句,$方式无法防止 Sql 注入 ${}
注意:MyBatis 排序时使用 order by 动态参数时需要注意,用$而不是#