首先,mybatis中#{}和${}的区别就是,#{}传参解析sql的时候,会在相应的变量上加''(单引号),${}传的是啥就是啥,不会加''(单引号)。
其次,我们在传参的时候大部分情况用的都是#{},因为我们大多时候传的都是变量值,在我们传的变量加''。那么什么情况用${}?最后一段介绍。下面先看#{}代码:
xml:
<select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
select * from T_TEAM_ORG where SEQ_ID = #{seqId,jdbcType=VARCHAR}
</select>
这时候如果我们在serviceImpl中定义String seqId = "123"; 那么程序运行的时候sql是
select * from T_TEAM_ORG where SEQ_ID = '123'
我们会发现这样传入参数值非常方便。那么什么时候用${}?
----------------------------------------------------------------------------------------------------
使用${}的场景:传入的是表名、属性名等,不能加''(单引号),相信大家肯定有用到要传入字段名的情况。如下面
<select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
select * from T_TEAM_ORG where #{columnName} = '123'
</select>
这是错误的,因为用的是#{},如果我们在serviceImpl中定义String columnName = "SEQ_ID"; 那么程序运行的时候sql是那么程序运行的时候sql是
select * from T_TEAM_ORG where 'SEQ_ID' = '123'
对!加了''(单引号),很明显这是错误的,这时候我们就要用${},正确的是
<select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
select * from T_TEAM_ORG where ${columnName} = '123'
</select>
程序运行的时候sql是那么程序运行的时候sql是
select * from T_TEAM_ORG where SEQ_ID = '123'