#{}与${}
1.#{}实现向prepareStatement中的预处理语句中设置参数值,sql语句中#{}表示一个占位符。
SELECT*FROMUSERWHEREid=#{value}
使用占位符可以防止sql的注入,在使用时不需要关心参数的类型,mybatis会自动的进行Java与jdbc的转换。#{}可以接受简单类型和pojo的属性值。如果parameterType中指定的是单个的简单类型,#{}中可以使用value或是其他值。
2. #{}与${}的不同:
通过${}可以将parameterType传入的内容拼接在sql中,并且不进行jdbc类型转换,${}可以接受简单类型和pojo的属性值,若parameterType为单个简单类型时,${}中必须使用value。使用${}不能防止sql注入,但有时会很方便,例如:
SELECT*FROMUSERWHEREusernameLIKE'%${value}%'
3. 再比如order by排序,如果将列名通过参数传入sql,根据传的列名进行排序,应该写为:ORDERBY${columnName}
如果使用#{}将无法实现此功能。