MyBatis 插入失败后爆出 500 ,如何捕获异常?
我们在使用 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 ,如何捕获异常?的更多相关文章
- mybatis框架(6)---mybatis插入数据后获取自增主键
mybatis插入数据后获取自增主键 首先理解这就话的意思:就是在往数据库表中插入一条数据的同时,返回该条数据在数据库表中的自增主键值. 有什么用呢,举个例子: 你编辑一条新闻,同时需要给该新闻打上标 ...
- Mybatis插入数据后返回主键id
有时候使用mybatis插入数据后,需要用到记录在数据库中的自增id,可以利用keyProperty来返回,赋值给实体类中的指定字段. 单条记录插入并返回 First, if your databas ...
- mybatis插入数据后将其ID返回
背景 mybatis没有关联保存的功能,所以主从表需要分开保存,这就涉及到主表保存后要再次获取主表ID的环节,以下介绍mybatis插入数据后返回其自增ID的两种方式 方案 1.sql获取 <i ...
- 【JAVA - SSM】之MyBatis插入数据后获取自增主键
很多时候,我们都需要在插入一条数据后回过头来获取到这条数据在数据表中的自增主键,便于后续操作.针对这个问题,有两种解决方案: (1)先插入,后查询.我们可以先插入一条数据,然后根据插入的数据的各个字段 ...
- 【JavaEE】之MyBatis插入数据后获取自增主键
很多时候,我们都需要在插入一条数据后回过头来获取到这条数据在数据表中的自增主键,便于后续操作.针对这个问题,有两种解决方案: 先插入,后查询.我们可以先插入一条数据,然后根据插入的数据的各个字段值,再 ...
- mybatis插入数据后返回自增主键ID详解
1.场景介绍: 开发过程中我们经常性的会用到许多的中间表,用于数据之间的对应和关联.这个时候我们关联最多的就是ID,我们在一张表中插入数据后级联增加到关联表中.我们熟知的mybatis在插入数据后 ...
- mybatis插入数据后返回对象id
1.插入的为对象,成功插入后,会返回到指定的字段id中,@Options(useGeneratedKeys=true,keyColumn="id").
- mybatis插入数据后返回自增的主键id
在插入数据时候想自动返回mysql的自增的主键,需要在mapper.xml中配置下: <insert id="insert" parameterType="com. ...
- mybatis插入一个对象后获取表中自增的主键Id并且传入到插入的的对象中,方便将对象中其他属性赋值给其他以前表主键Id作为非空字段的表
原本的sql语句为: <insert id="xx" parameterType="com.hrt.partner.model.ShopInsert"&g ...
随机推荐
- css中em小于1时chrome字体大小和firefox字体大小不一致的问题
css中em设置为0.8,结果页面显示,chrome字体比firefox字体大了不少. chrome有默认字体大小,默认为12px.设置的字体大小小于12px时,也是按照12px来显示. firefo ...
- python中关于with以及contextlib的使用
一般在coding时,经常使用with来打开文件进行文件处理,然后无需执行close方法进行文件关闭. with open('test.py','r' as f: print(f.readline() ...
- 【计算机视觉】MTCNN基于NCNN的测试过程
前言 操作过程 NCNN: https://github.com/Tencent/ncnn/wiki/how-to-build#build-for-linux-x86; vector初始化: int ...
- linux LVM 系统盘扩容
1.fdisk /dev/sda2.输入n,开始创建新分区3.输入p4.输入w5.mkfs.ext4 /dev/sda36.pvcreate /dev/sda37.vgdisplay 查看VG nam ...
- socket之IO多路复用
概述 目的:同一个线程同时处理多个IO请求. 本文以python的select模块来实现socket编程中一个server同时处理多个client请求的问题. web框架tornado就是以此实现多客 ...
- Flutter 移动端屏幕适配方案和制作
flutter_screenutil插件 flutter 屏幕适配方案,让你的UI在不同尺寸的屏幕上都能显示合理的布局! 注意:此插件仍处于开发阶段,某些API可能尚未推出. 安装依赖: 安装之前请查 ...
- windows7-maven配置
1.确认jdk安装 2.下载 3.解压缩 4.配置环境变量 (1)计算机属性--高级系统配置--高级--环境变量---系统变量--新建 (2)添加环境变量 MAVEN_HOME PATH中添加到mav ...
- vc++中播放声音
http://www.cnblogs.com/xuemaxiongfeng/articles/2462560.html http://bbs.csdn.net/topics/390729457 htt ...
- NDK学习笔记-JNI的引用
JNI中的引用意在告知虚拟机何时回收一个JNI变量 JNI引用变量分为局部引用和全局引用 局部引用 局部引用,通过DeletLocalRef手动释放对象 原因 访问一个很大的Java对象,使用之后还用 ...
- Nginx 开启支持谷歌Brotli压缩算法
参考链接:https://cloud.tencent.com/developer/article/1501009