在 MyBatis 中,如何设置 <sql> 元素的范围以供重用
In MyBatis, how to set scope for an <sql> element for re-using
<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>
因此,这将为您增加一些通用性。
<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>
因此,这将为您增加一些通用性。