database - 在 MyBatis 中,如何为 <sql> 元素设置范围以供重用

标签 database config mybatis

<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>

因此,这将为您增加一些通用性。

关于database - 在 MyBatis 中,如何为 <sql> 元素设置范围以供重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34195293/

相关文章:

java - MyBatis - 在 foreach 中绑定(bind)参数

java - 如何使用mybatis实现递归映射?

java - mybatis的@TableGenerator

php - 图表 : database data can't insert to the bar chart using php

php - Symfony 2 配置页面没有样式

ruby - 如何正确地将 domain.com/subfolder 指向 Ruby with Rack 中的静态网站?

authentication - 在 docker config 中保存 docker 凭据

java - 如何使用 Derby JDBC 获取外键引用?

mysql - 在 Windows 上运行 MySQL 或 MariaDB 服务器的最小文件 - (Portable MySQL/MariaDB)

database - 您将为英国数据库使用多少个地址字段?