我正在尝试将MyBatis游标与Spring Boot配合使用来迭代大型查询:
映射器:
@Mapper
@Repository
interface UserMapper {
@Select("SELECT * FROM huge_user_table")
Cursor<User> getUsers();
消费者:
@Component
public class UserProcessor {
@Autowired private UserMapper userMapper;
public boolean process() throws IOException {
Cursor<User> users = userMapper.getUsers();
//users.isOpen() == false
for (User user : users) {
//Never iterates
System.out.println(user.getId());
}
当我将光标恢复为关闭状态时,没有返回记录。
我想念什么吗?
答案 0 :(得分:1)
最可能的问题是您尝试在事务之外使用CACHE MANIFEST
CACHE:
index.html
# v01
。不支持。
var testString = "+4";
console.log(testString);
window.location.href = "file.php?testString=" + encodeURIComponent(testString);
基本上是JDBC Cursor
的包装。为了从Cursor
获取值,应打开基础ResultSet
。如果您在整个循环时间内都没有事务,那么执行查询时(在您的情况下,Cursor
方法的持续时间内),spring将打开连接。方法完成后,连接将关闭,因此ResultSet
使用的getUsers
也将关闭。
将ResultSet
添加到Cursor
,这应该可以解决问题。