курсор mybatis mysql Операции запрещены после закрытия оператора - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь использовать курсор MyBatis с Spring Boot2.0.3 (mybatis3.5.4, mybatis-plus3.1.2, duridjdbc1.1.21, mysql -connect5.0.17) для итерации большого запроса. для Mysql я видел Курсор MyBatis с Spring Boot , но он все еще не работает.

xml:

<select id="fetchListByCreateDate" fetchSize="-2147483648"  statementType="PREPARED" resultSetType="FORWARD_ONLY" resultType="entityClass">
     SELECT
     *
     FROM table
     ORDER BY create_date DESC
 </select>

Служба:

    @Override
    @Transactional //**delete it**
    //**change it to** List<entityClass> ......
    public Cursor<entityClass> fetchListByCreateDate() {
        return this.mapper.fetchListByCreateDate();
    }

когда я вызываю

        //**change it** List<entityClass> item = serivce.fetchListByCreateDate();
        Cursor<entityClass> item = serivce.fetchListByCreateDate();
        Iterator<entityClass> iter = item.iterator();
        List<entityClass> list = new ArrayList<>();
        while (iter.hasNext()) {
            // Fetch next 10 employees
            for (int i = 0; i < 100 && iter.hasNext(); i++) {
                list.add(iter.next());
            }
            list.clear();
        }

, тогда:

Cause: java.sql.SQLException: No operations allowed after statement closed.
; ]; No operations allowed after statement closed.; nested exception is java.sql.SQLException: No operations allowed after statement closed.

    at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:110)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
    at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)
    at com.sun.proxy.$Proxy152.selectCursor(Unknown Source)
    at org.mybatis.spring.SqlSessionTemplate.selectCursor(SqlSessionTemplate.java:206)

измените Cursor на List, тогда Mybatis будет читать все данные.

...