Spring事务机制以及异常的处理(正确版)

编程入门 行业动态 更新时间:2024-10-09 10:27:15

Spring事务机制以及<a href=https://www.elefans.com/category/jswz/34/1771210.html style=异常的处理(正确版)"/>

Spring事务机制以及异常的处理(正确版)

如图 想添加一位学生 前台规划如图所示所需学生姓名,学号,学院,班级,年级,性别,公寓以及宿舍名

学生表构造如下

外键对应班级id,宿舍id,宿舍表中管理公寓id,学院id

前台点击按钮事件绑定方法

$(document).ready(function() {//增加学生提交$("#addStudSub").click(function self() {// 禁用按钮$("#addStudSub").addClass('disabled');// 学院var coll = $("#seleColl").val();// 班级var clas = $("#seleClas").val();// 年级var grad = $("#seleGrade").val();// 性别var sex = $("#seleSex").val();// 公寓var apar = $("#seleApar").val();// 宿舍var dorm = $("#seleDorm").val();// 验证是否都被选择if (coll != '' && clas != ''&& grad != '' && sex != ''&& apar != '' && dorm != '') {$.ajax({url : "/gradPro/stud/addStud.action",data : {"studName":$("#studentName").val(),"studNo":$("#studentNo").val(),"collName":coll,"clasName":clas,"grade":grad,"sex":sex,"aparName":apar,"dormName":dorm},success : function(data) {//添加学生成功if ("1" == data.status) {// 成功后延时两秒跳转并提示信息countDown(2, data.message);} else if ("0" == data.status) {// 提示错误信息$("#alterTip").text(data.message);$("#alterTips").modal('show');}}})}// 如果存在未被选择else {// 提示并禁用按钮$("#subTips").hide().html("<label class='label label-danger'>请全部勾选选项</label>").show(500);//刷新页面setTimeout("location.reload()", 2000);}})					
}
);

对应后台Controller层方法如下:(这不是重点,请看到Service层返回再看)

	/*** 新增学生* @param studName* @param studNo* @param collName* @param clasName* @param grade* @param sex* @param aparName* @param dormName* @return*/@SuppressWarnings("finally")@RequestMapping("addStud.action")@ResponseBodypublic DataSet addStud(@RequestParam("studName") String studName, @RequestParam("studNo") String studNo,@RequestParam("collName") String collName, @RequestParam("clasName") String clasName, @RequestParam("grade") String grade,@RequestParam("sex") String sex, @RequestParam("aparName") String aparName, @RequestParam("dormName") String dormName) {DataSet data = new DataSet();try{//尝试添加学生studentService.addStud(studName,studNo,collName,clasName,grade,sex,aparName,dormName);data.setStatus("1");data.setMessage("添加学生成功");}//如果捕获到宿舍已经住满catch(DormHasAlaredyFullException e){data.setStatus(e.getErrorCode());data.setMessage(e.getErrorMSG());}finally{return data;}}

Service层的方法:如下图所示,先声明了一个事务@Transactional 配置代表这是一个Spring事务

如果查出宿舍总床位和入住人数已经相等,代表宿舍已住满,则这时抛出一个自定义宿舍已住满异常,事务结束。

否则继续下面逻辑,之前博客中也是应该如此处理。在返回controller层中捕获此异常,跟ajax请求做交互处理提示给用户。

	@Transactional@Overridepublic int addStud(String studName, String studNo, String collName, String clasName, String grade, String sex,String aparName, String dormName) {//学生信息添加成功flag默认未成功int flag = 0;// 拿到学院IdString colleaId = colleageDao.getCollIdByName(collName);// 拿到班级IdString clasId = classesDao.getClassIdByClassName(clasName);// 拿到dormIdString dormId = dormitoryDao.getDormIdByDormName(dormName);// 先在宿舍中更新信息// 查询除宿舍总人数和已住人数DormitoryPageDto tempDto = dormitoryDao.selectTotalBedAndHave(dormId);// 如果公寓已经住满了if (tempDto.getHaveEver() == tempDto.getTotalBed()) {// 抛出公寓已经住满了异常DormHasAlaredyFullException de = new DormHasAlaredyFullException("0", "宿舍"+dormName+"已经住满了");throw de;} // 如果宿舍未住满else {// 如果宿舍只剩一张床铺if ((tempDto.getHaveEver() + 1) == tempDto.getTotalBed()) {// 住进学生后修改宿舍状态Dormitory dormitory = new Dormitory();dormitory.setDormitoryId(Integer.parseInt(dormId));dormitory.setStatus("1");dormitoryDao.alterStatus(dormitory);}// 添加学生信息Student student = new Student();student.setStudentName(studName);student.setStudentNo(studNo);student.setColleageId(Integer.parseInt(colleaId));student.setClassId(Integer.parseInt(clasId));student.setGrade(grade);student.setSex(sex);student.setDormitoryId(Integer.parseInt(dormId));student.setStatus("1");flag = studentDao.addStud(student);}return flag;}

自定义异常类很简单:

/*** 添加学生时宿舍已住满异常* @author BreakingBad_**/
public class DormHasAlaredyFullException extends RuntimeException {private static final long serialVersionUID = 1L;private String errorCode;private String errorMSG;public DormHasAlaredyFullException(String errorMSG) {super(errorMSG);}public DormHasAlaredyFullException(String code, String message) {this.setErrorCode(code);this.setErrorMSG(message);}public String getErrorCode() {return errorCode;}public void setErrorCode(String errorCode) {this.errorCode = errorCode;}public String getErrorMSG() {return errorMSG;}public void setErrorMSG(String errorMSG) {this.errorMSG = errorMSG;}

测试:


表中宿舍名为702-4的总床位为6,对应的学生外键指向该宿舍的人数也为6

此时尝试向该宿舍添加学生:


成功。

更多推荐

Spring事务机制以及异常的处理(正确版)

本文发布于:2024-03-13 17:36:21,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1734480.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:异常   机制   正确   事务   Spring

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!