#{}与${}使用的区别
在Mybatis的SQL语句中使用
#{}是预编译处理,${}是字符串替换。
Mybatis 在处理#{}时,会将 sql 中的#{}替换为?号,调用 PreparedStatement 的 set 方法来赋值;、
Mybatis 在处理 ${}时,就是把${}替换成变量的值。
使用#{}可以有效的防止 SQL 注入,提高系统安全性。
示例
<select id="getToTherapyOutPeople" resultType="java.lang.Integer">
SELECT
COUNT( 0 )
FROM
p_alarm_patient_therapy_info a
INNER JOIN p_alarm_patient_info b ON b.patient_id=a.patient_id
WHERE
therapy_status = '4202'
<if test="month != null and month != ''">
AND TO_DAYS(NOW()) - TO_DAYS(create_date) <![CDATA[<=]]> ${month};
</if>
</select>
<select id="getByAlarmPatientInfoId"
resultType="com.sz.web.base.domain.local.entity.AlarmPatientTherapyInfo">
SELECT *
FROM p_alarm_patient_therapy_info a
WHERE a.therapy_id = #{therapyInfo}
</select>