<sql>
像这样的元素:
<sql id="update_fragment">
<set>
<if test="id != null">
id = #{id},
</if>
<if test="name != null">
id = #{name},
</if>
...
</set>
</sql>
它用于 <update>
:
<update id="update" parameterType="MyTableBean">
UPDATE MyTable
<include refid="update_fragment"/>
WHERE id =# {id}
</update>
在 DAO 中:
Integer update(MyTableBean myTableBean);
现在,我编写一个 batchUpdate 方法:
Integer batchUpdate(@Param("ids")List<Integer> ids, @Param("bean")MyTableBean myTableBean);
我想重新使用“update_fragment”<sql>
元素。
<update id="update">
UPDATE MyTable
<include refid="update_fragment"/>
WHERE ids IN
<foreach>...</foreach>
</update>
但是'update_fragment'中的范围似乎是错误的。
看来我得重写一个<sql>
这改变了#{id}
至 #{bean.id}
.
有什么方法可以在不重写新的 <sql>
的情况下重新使用该语句.
请您参考如下方法:
您可以尝试在您的更新方法中添加@Param 注释:
Integer update(@Param("bean") MyTableBean myTableBean);
然后更正你的sql表达式:
<sql id="update_fragment">
<set>
<if test="id != null">
id = #{bean.id},
</if>
<if test="name != null">
id = #{bean.name},
</if>
...
</set>
因此,这将为您增加一些通用性。