org.apache.ibatis.executor.ExecutorException: Executor was closed.

  • 最近写Mybatis的JavaWeb项目踩的坑太多了,(都想哭了,可是咬牙坚持了下来,继续敲)。

说说今天的主角;org.apache.ibatis.executor.ExecutorException: Executor was closed.

程序运行起来,执行一个页面后返回一个新页面的数据是上一个页面的。这就痛苦了。控制台提示以下java

org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database. Cause: org.apache.ibatis.executor.ExecutorException: Executor was closed.
### Cause: org.apache.ibatis.executor.ExecutorException: Executor was closed.
	at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:150)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:77)
	at com.damu.dao.UsersDAO.findById(UsersDAO.java:37)
	at com.damu.servlet.UserFindByIdServlet.doPost(UserFindByIdServlet.java:19)
	at com.damu.servlet.UserFindByIdServlet.doGet(UserFindByIdServlet.java:28)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
复制代码

在查找众多资料中,发现sessio在查询数据所有的时候,已经关闭了,代码以下:sql

public List<Users> findAll() {
        try {
            list = sqlSession .selectList("findAll");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sqlSession.close();
        }
        return list;
    }

    /*
     * 查询单个用户*/
    public Users findById(Integer id) {
        try {
            users = sqlSession.selectOne("findById", id);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sqlSession.close();
        }
        return users;
    }
复制代码

在执行第一session的时候已经关闭了,修代码以下apache

sqlSession = SqlSessionFactoryUtils.getsqlSessionFactory().openSession();
        return sqlSession;
    }
复制代码

把要用的session抽象到一方法里面,一个方法只是关闭一次。 总结:bash

  • 多思考代码原理,和逻辑思想 *细心
相关文章
相关标签/搜索