mybatis-plus insertOnDuplicateKeyUpdate
时间: 2023-06-30 20:26:05 浏览: 166
mybatis-plus-boot-starter-3.1.0.jar
Mybatis-Plus 是 Mybatis 的增强工具,提供了一些常用的 CRUD 操作的实现,其中包括了 `insertOnDuplicateKeyUpdate` 方法。
`insertOnDuplicateKeyUpdate` 方法可以在向数据库插入数据时,如果出现重复的唯一索引或主键冲突时,执行更新操作,而不是插入操作。这个方法是通过在 SQL 语句中使用 MySQL 的 `ON DUPLICATE KEY UPDATE` 语句来实现的。
使用 Mybatis-Plus 的 `insertOnDuplicateKeyUpdate` 方法,需要在实体类中标注唯一索引或主键的注解,并且在执行插入操作时,传入一个 `UpdateWrapper` 对象,用于指定更新的字段和条件。
示例代码如下:
```java
@Data
public class User {
@TableId(type = IdType.AUTO)
private Long id;
@TableField(value = "user_name", fill = FieldFill.INSERT_UPDATE)
private String userName;
@TableField(value = "password", fill = FieldFill.INSERT_UPDATE)
private String password;
@TableField(value = "age", fill = FieldFill.INSERT_UPDATE)
private Integer age;
@TableField(value = "email", fill = FieldFill.INSERT_UPDATE)
private String email;
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
@TableField(value = "version", fill = FieldFill.INSERT)
private Integer version;
@TableLogic
@TableField(value = "deleted", fill = FieldFill.INSERT)
private Integer deleted;
@Version
@TableField(value = "opt_lock", fill = FieldFill.INSERT)
private Integer optLock;
@TableIndex(value="idx_user_name", unique = true)
private String name;
}
```
```java
User user = new User();
user.setName("test");
user.setAge(18);
user.setEmail("test@mp.com");
user.setPassword("test123");
// 构建 UpdateWrapper 对象
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.lambda().eq(User::getName, user.getName());
// 调用 insertOnDuplicateKeyUpdate 方法插入或更新数据
int rows = userMapper.insertOnDuplicateKeyUpdate(user, updateWrapper);
```
在执行插入操作时,如果存在重复的唯一索引或主键冲突,就会执行更新操作,否则就会插入新的数据。这样就可以避免出现重复的数据,保证数据的唯一性。
阅读全文