1、_parameter是什么?
可以看到_parameter != null这句代码,这里涉及到mapper文件传入的参数,如果只传入了一个参数,那么_parameter 就代表该参数,如果有多个参数,那么_parameter 可以get(0)得到第一个参数。
<if test="_parameter != null" >
<include refid="Update_By_Example_Where_Clause" />
</if>
int updateByExampleSelective(@Param("record") TrmlReport record, @Param("example") TrmlReportExample example);
上面就是传入了两个参数,那么我们如上面解释的就会得到第一个参数record,好解释了上述内容,我们又要去问这里@Param是什么意思?
2、@Param是什么?
其实就像刚刚_parameter一样我们只是也只能取出一个参数,那么当我们只有一个参数的时候@param只有重命名参数的含义,但是当我们有多个参数的时候@param相当于为参数起了名字,这样我们就可以取出想要的参数的属性。
这里进一步解释举一个例子,record下有id这个属性,example下也有id这个属性,那么在sql语句中,#{id}到底是代表record.id还是example.id其实是不知道的,所以我们需要@param为多个参数的情况下取名来解决这个问题
3、refid是什么?
这里refid作用就是调用了如下写的代码
<sql id="Update_By_Example_Where_Clause" >
<where >
<foreach collection="example.oredCriteria" item="criteria" separator="or" >
<if test="criteria.valid" >
<trim prefix="(" suffix=")" prefixOverrides="and" >
<foreach collection="criteria.criteria" item="criterion" >
<choose >
<when test="criterion.noValue" >
and ${criterion.condition}
</when>
<when test="criterion.singleValue" >
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue" >
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue" >
and ${criterion.condition}
<foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>