java中使用mybatis-plus中save的时候有唯一性约束如何跳过异常继续执行程序
时间: 2024-10-09 18:16:34 浏览: 59
MyBatis-Plus入门+MyBatis-Plus文档手册 中文pdf高清版.rar
5星 · 资源好评率100%
在Java中,当你使用MyBatis-Plus的`save()`方法插入数据时遇到唯一性约束(通常是因为主键冲突),默认它会抛出`DuplicateKeyException`。如果你想在这种情况下跳过异常并继续执行程序,你可以自定义一个全局的异常处理器(GlobalExceptionHandler)。以下是一个简单的步骤:
1. 首先,在项目中创建一个全局异常处理类,例如`GlobalExceptionHandler.java`:
```java
import org.apache.ibatis.exceptions.PersistenceException;
import org.apache.ibatis.session.RowBounds;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = {PersistenceException.class})
public String handleUniqueConstraintViolation(PersistenceException e) {
// 检查异常是否因唯一性约束引发
if (e.getCause() instanceof DuplicateKeyException) {
System.out.println("记录已存在,忽略唯一性冲突");
// 返回一个错误消息或者你想执行的其他操作,比如记录日志后返回成功
return "error";
} else {
// 如果不是唯一性冲突,将原始异常抛出
throw e;
}
}
}
```
2. 然后,在Spring Boot的配置文件中启用全局异常处理器,如`application.properties`或`application.yml`:
```properties
spring.mvc.throw-exception-if-no-handler-found=true
mybatis-plus.global-config=your.GlobalExceptionHandler
```
这会在发生`PersistenceException`时首先尝试通过`GlobalExceptionHandler`处理,如果它是`DuplicateKeyException`,则打印一条消息并继续执行。如果不是这个异常类型,则让其自然传播。
阅读全文