MyBatis如何配置这样的MERGE语句?
时间: 2024-10-19 20:02:27 浏览: 9
在MyBatis中配置 `MERGE` 语句,你需要在XML映射文件中创建一个`<insert>`或`<update>`标签,结合 `<script>` 标签来编写动态的 SQL。首先,定义一个映射标签如 `<select>` 作为源数据的选择,然后使用 `<script>` 创建 MERGE 语句。
例如:
```xml
<mapper namespace="com.example.YourMapper">
<!-- 查询源数据 -->
<select id="getSourceData" resultType="YourDataType">
SELECT * FROM source_user WHERE username = #{username}
</select>
<!-- 映射 MERGE 更新语句 -->
<update id="mergeUser" parameterType="map">
<script>
<![CDATA[
String sql = "MERGE INTO target_user t " +
"USING ($sourceData) s " +
"ON (t.username = s.username) " +
"WHEN MATCHED THEN " +
"UPDATE SET t.info = s.info " +
"WHEN NOT MATCHED BY TARGET THEN " +
"INSERT (username, info) VALUES (#{username}, s.info)";
// 将源数据变量注入到SQL中
SqlSession sqlSession = SqlSessionFactory.getInstance().openSession();
try {
SqlCommand command = sqlSession.createCommand(sql);
command.execute();
} finally {
sqlSession.close();
}
]]>
</script>
</update>
</mapper>
```
这里的 `YourMapper` 和 `YourDataType` 需要替换为你实际的包名和数据类型。在运行时,你可以通过传入 `username` 参数来触发这个更新操作。
阅读全文