项目架构:springboot + mybatis-Plus
代码示例:
private static final String SQLSTATE_23000 = "23000";
Person person = new Person();
person.setId("aaa");
person.setName("bbb");
try {
personMapper.insert(person);
} catch (Exception e) {
Throwable cause = e.getCause();
if (cause instanceof SQLIntegrityConstraintViolationException) {
String sqlState = ((SQLIntegrityConstraintViolationException) cause).getSQLState();
log.info("Person表中已存在主键为:【{}】的数据,sqlState:{}", person .getId(), sqlState);
if (SQLSTATE_23000.equals(sqlState)) {
try {
personMapper.updateById(person);
} catch (Exception e1) {
log.error("更新Person表 失败,原因:", e1);
}
}
} else {
log.error("保存Person信息 失败,原因:", e);
}
}
说明:mybatis-Plus内置的sql方法,捕获异常时只能捕获Exception,先判断Exception的类型,才能拿到sqlState的值,根据sqlState可以做其他处理。