java - mybatis cursor mysql 语句关闭后不允许操作
问题描述
我正在尝试将 MyBatis Cursor 与 Spring Boot2.0.3(mybatis3.5.4,mybatis-plus3.1.2,duridjdbc1.1.21,mysql-connect5.0.17) 一起使用来迭代大型查询。对于 Mysql,我在Spring Boot 中看到了 MyBatis Cursor, 但它仍然无法正常工作。
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 将读取所有数据。
解决方案
推荐阅读
- mongodb - 在聚合中展平 MongoDB 嵌套数组
- vba - 查询中的 RecordsAffected 计数不适用于 Sharepoint
- javascript - 如何使用 Javascript 在 DOM 上查找并单击此元素?
- android - 单击按钮时如何关闭整个 Kotlin 应用程序?
- php - 如何防止CSS从另一部分影响代码
- ios - 如何从 Alamofire 解析 upload.responseJSON - swift?
- scala - 从地图序列创建 Spark 数据帧
- ios - 当前点大于其余点的图像的自定义页面控件不起作用
- css - CSS Grid自动调整每行的宽度
- ruby - 标头/有效负载中的 ruby rest-client 内容