带弹簧靴的MyBatis光标

时间:2018-08-02 13:38:36

标签: spring-boot mybatis spring-mybatis

我正在尝试将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());
        }

当我将光标恢复为关闭状态时,没有返回记录。

我想念什么吗?

1 个答案:

答案 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,这应该可以解决问题。