mybatisplus存在更新否则新增
时间: 2023-06-28 13:05:16 浏览: 245
是的,MyBatis Plus 提供了一个方法叫做 `saveOrUpdate`,可以根据实体是否存在主键来选择是插入新纪录还是更新已有记录。
具体实现可以按照以下步骤:
1. 在实体类中定义主键字段和对应的 `@TableId` 注解。
```java
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
// ...
}
```
2. 在 Mapper 接口中定义 `saveOrUpdate` 方法。
```java
public interface UserMapper extends BaseMapper<User> {
int saveOrUpdate(User user);
}
```
3. 在 XML 文件中实现 `saveOrUpdate` 方法。
```xml
<insert id="saveOrUpdate" parameterType="com.example.User">
<selectKey keyProperty="id" resultType="java.lang.Long" order="BEFORE">
SELECT IFNULL(MAX(id), 0) + 1 AS id FROM user
</selectKey>
INSERT INTO user(id, name)
VALUES (#{id}, #{name})
ON DUPLICATE KEY UPDATE name = #{name}
</insert>
```
其中,`selectKey` 标签用于生成主键,`ON DUPLICATE KEY UPDATE` 语句用于在主键重复时更新记录。
4. 在 Service 层中调用 `saveOrUpdate` 方法。
```java
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public void saveOrUpdate(User user) {
userMapper.saveOrUpdate(user);
}
}
```
这样就可以根据实体是否存在主键来选择是插入新纪录还是更新已有记录了。
阅读全文