Override public void delUserByIdInteger id try SqlSession sqlSession = MyBatisUtilgetSqlSession; UserDao mapper = sqlSessiongetMapperUserDaoclass; mapperde
这段代码存在问题。问题在于在try块中,如果发生异常,会导致MyBatisUtil.getSqlSession().rollback()抛出异常,而这个异常会导致finally块中的MyBatisUtil.closeSqlSession()方法无法执行,从而导致资源没有被正确关闭。
为了解决这个问题,可以在catch块中添加一个try-catch来捕获MyBatisUtil.getSqlSession().rollback()的异常,并在内部进行处理,确保资源能够被正确关闭。修改后的代码如下:
@Override public void delUserById(Integer id) { try { SqlSession sqlSession = MyBatisUtil.getSqlSession(); UserDao mapper = sqlSession.getMapper(UserDao.class); mapper.delUserById(id); sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); try { MyBatisUtil.getSqlSession().rollback(); } catch (Exception ex) { ex.printStackTrace(); } } finally { MyBatisUtil.closeSqlSession(); } }
这样做可以确保无论在try块还是catch块中发生异常,都能够在finally块中正确关闭资源
原文地址: http://www.cveoy.top/t/topic/iVON 著作权归作者所有。请勿转载和采集!