我们在使用 Mybatis 的时候,会出现以下场景

数据表里有一些字段被设置为了 不可为 null

但是我们的用户在提交表单的时候没有提交所需的 字段数据

然后 Mybatis 在数据库做操作的时候就出错了,然而它却直接给页面返回了一个 500

当然了,我们是一定不希望用户看到 500 的

那怎么办呢?当然是把这个错误给捕获了,然后把它处理掉,给用户返回提示,而不是500

但是大家会发现,这个 Mybatis 的异常,并没有那么容易获取

步骤如下:

1.在 Mapper 接口里抛出  DataAccessException 异常

2.在 ServiceImpl 里,调用了该 Mapper 接口的方法上抛出 DataAccessException 异常

3.在 Controller 里捕获  DataAccessException 异常并返回提示

样例展示:

int insert(Product record) throws DataAccessException;

int insertSelective(Product record) throws DataAccessException;
@Override
public ServerResponse saveOrUpdateProduct(Product product) throws DataAccessException {
......
}
@RequestMapping(value = "save.do", method = RequestMethod.POST)
@ResponseBody
public ServerResponse productSave(HttpSession session, Product product) {
 User user = (User) session.getAttribute(Const.CURRENT_USER);
  if (user == null) {
  return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(), "未登录");
}
if (iUserService.checkAdminRole(user).isSuccess()) {
try {
  return iProductService.saveOrUpdateProduct(product);
}catch (DataAccessException e){
  return ServerResponse.createByErrorMessage("插入或更新失败,参数错误");
}
} else {
  return ServerResponse.createByErrorMessage("无权限");
}
}

这样数据库里的操作错误就不会被直接粗暴地以500的方式展示在用户面前了
转:https://blog.csdn.net/linzhiqqq/article/details/82664773

MyBatis 插入失败后爆出 500 ,如何捕获异常?的更多相关文章

  1. mybatis框架(6)---mybatis插入数据后获取自增主键

    mybatis插入数据后获取自增主键 首先理解这就话的意思:就是在往数据库表中插入一条数据的同时,返回该条数据在数据库表中的自增主键值. 有什么用呢,举个例子: 你编辑一条新闻,同时需要给该新闻打上标 ...

  2. Mybatis插入数据后返回主键id

    有时候使用mybatis插入数据后,需要用到记录在数据库中的自增id,可以利用keyProperty来返回,赋值给实体类中的指定字段. 单条记录插入并返回 First, if your databas ...

  3. mybatis插入数据后将其ID返回

    背景 mybatis没有关联保存的功能,所以主从表需要分开保存,这就涉及到主表保存后要再次获取主表ID的环节,以下介绍mybatis插入数据后返回其自增ID的两种方式 方案 1.sql获取 <i ...

  4. 【JAVA - SSM】之MyBatis插入数据后获取自增主键

    很多时候,我们都需要在插入一条数据后回过头来获取到这条数据在数据表中的自增主键,便于后续操作.针对这个问题,有两种解决方案: (1)先插入,后查询.我们可以先插入一条数据,然后根据插入的数据的各个字段 ...

  5. 【JavaEE】之MyBatis插入数据后获取自增主键

    很多时候,我们都需要在插入一条数据后回过头来获取到这条数据在数据表中的自增主键,便于后续操作.针对这个问题,有两种解决方案: 先插入,后查询.我们可以先插入一条数据,然后根据插入的数据的各个字段值,再 ...

  6. mybatis插入数据后返回自增主键ID详解

    1.场景介绍: ​ 开发过程中我们经常性的会用到许多的中间表,用于数据之间的对应和关联.这个时候我们关联最多的就是ID,我们在一张表中插入数据后级联增加到关联表中.我们熟知的mybatis在插入数据后 ...

  7. mybatis插入数据后返回对象id

    1.插入的为对象,成功插入后,会返回到指定的字段id中,@Options(useGeneratedKeys=true,keyColumn="id").

  8. mybatis插入数据后返回自增的主键id

    在插入数据时候想自动返回mysql的自增的主键,需要在mapper.xml中配置下: <insert id="insert" parameterType="com. ...

  9. mybatis插入一个对象后获取表中自增的主键Id并且传入到插入的的对象中,方便将对象中其他属性赋值给其他以前表主键Id作为非空字段的表

    原本的sql语句为: <insert id="xx" parameterType="com.hrt.partner.model.ShopInsert"&g ...

随机推荐

  1. 使用sproto buff 的陷阱

    当sproto协议包中的数组元素,长度为0时,会出现接收异常.在没有调试断点的情况下,会停止接收其它协议.

  2. flask的jinja2过滤器使用:遍历索引指定标签class属性,实现样式变化

    在flask项目中实现上图效果,采用使用自定义过滤器的形式对 span 标签的 class 指定. 1.定义过滤器 # common.py def do_index_class(index): &qu ...

  3. NDK学习笔记-多线程与生产消费模式

    在做NDK开发的时候,很多情况下都是需要使用多线程的,一方面是提高程序运行效率,另一方面就是防止主线程阻塞 C的多线程 在C语言里,可以通过对于POSIX标准的运用,使得C语言执行多线程 提高程序的执 ...

  4. Webpack实现按需打包Lodash的几种方法详解

    参考链接:https://www.jb51.net/article/113235.htm 在vue-cli3中需要将babel-preset-es2015插件更换为@babel/preset-env插 ...

  5. Fourier serie

    你眼中看似落叶纷飞变化无常的世界,实际只是躺在上帝怀中一份早已谱好的乐章. 时域和频域就像观察一个物体一样,一个是主视图的,一个是侧视图. 1.在有限区间上由任意图形定义的任意函数都可以表示为单纯的正 ...

  6. Java编程思想(二)一切都是对象

    2.1用句柄操纵对象 尽管一切都看作是对象,但是操纵的标识符实际上是指向一个对象的“句柄”(handdle): 拥有一个句柄并不表示必须有一个对象同他连接: String  s:   这里创建的只是句 ...

  7. 20190724-Python网络数据采集/第 2 章 复杂HTML解析-导航树/正则表达式

    1. 导航树 经典的HTML树状结构 直接看下面的代码示例:(注意目标网页的标签大小写等细节,易出bug) from urllib.request import urlopen from bs4 im ...

  8. linux的定时器(timer_create,timer_gettime,timer_delete,SIGEV_SIGNAL)

    ref : http://blog.chinaunix.net/uid-28458801-id-5035347.html   系统中的一个模块需要频繁的获取系统时间,使用linux中内置的函数开销过大 ...

  9. VMware与主机联网设置

    1.编辑-虚拟机网络编辑器 2.虚拟机设置 3. 4.主机ping虚拟机

  10. Codeforces 1247C. p-binary

    传送门 首先 $n=\sum_{i=1}^{ans}(2^{x_{ans}}+p)$ 可以变成 $n-ans \cdot p=\sum_{i=1}^{ans}2^{x_{ans}}$ 注意到如果 $n ...