MSSQL,表Khdz,四个字段,F01-F04,其中F01\F03是主键,现要用mybatis插入一条数据,如果表存在则更新,不存在则插入
时间: 2023-12-23 14:03:35 浏览: 86
可以使用MyBatis的`insert`和`update`标签结合`merge`语句来实现表存在则更新,不存在则插入的操作。具体实现如下:
```
<insert id="insertOrUpdateKhdz" parameterType="map">
<selectKey keyProperty="F01" resultType="java.lang.String">
SELECT CASE WHEN EXISTS(SELECT 1 FROM Khdz WHERE F01 = #{F01}) THEN #{F01} ELSE #{F03} END
</selectKey>
MERGE INTO Khdz
USING (SELECT #{F01} F01, #{F02} F02, #{F03} F03, #{F04} F04 FROM DUAL) t
ON (Khdz.F01 = t.F01)
WHEN MATCHED THEN
UPDATE SET F02 = t.F02, F03 = t.F03, F04 = t.F04
WHEN NOT MATCHED THEN
INSERT (F01, F02, F03, F04) VALUES (t.F01, t.F02, t.F03, t.F04)
</insert>
```
在这个例子中,我们使用了`selectKey`标签来判断数据是否存在,如果存在则使用F01作为主键,否则使用F03作为主键。然后使用`merge`语句,将数据插入或更新到Khdz表中。在`merge`语句中,我们使用了`USING`关键字来指定插入的数据,然后使用`ON`关键字指定匹配条件,如果匹配到则执行更新操作,否则执行插入操作。
最后,我们将这个操作封装成一个MyBatis的`insert`标签,参数类型为map类型,包含了插入或更新所需的数据。
阅读全文