返回

MyBatis流式查询

发布时间:2022-10-16 03:10:31 880
# html# java# 数据库# sql# apache

转自:

​​http://www.java265.com/JavaFramework/MyBatis/202206/3614.html​​

下文笔者讲述Mybatis流式查询的相关简介说明,如下所示

Mybatis流式查询简介

流式查询简介:
我们将MyBatis返回数据为一个迭代器,这种查询模式称之为“流式查询”
流式查询的返回值:
使用迭代器逐条的遍历数据

流式查询注意事项:
流式查询过程中
数据库连接必须保持一直打开
并且执行完查询后需要手动的关闭数据库连接

MyBatis流式查询接口

MyBatis提供了
org.apache.ibatis.cursor.Cursor 的接口类用于流式查询
此接口继承了 java.io.Closeable 和 java.lang.Iterable 接口
所以Cursor 是可关闭/遍历的。

Cursor常见的方法

方法名

备注

isOpen()

用于在取数据之前判断 Cursor 对象是否是打开状态,只有当打开时 Cursor 才能取数据

isConsumed()

用于判断查询结果是否全部取完

getCurrentIndex()

返回已经获取了多少条数据

使用 Cursor 流式接口

@Mapper
public interface TestMapper {
@Select("select * from test limit #{limit}")
Cursor scan(@Param("limit") int limit);
}


@GetMapping("test/1/{limit}")
public void testFun(@PathVariable("limit") int limit) throws Exception {
try (
SqlSession sqlSession = sqlSessionFactory.openSession(); // 1
Cursor cursor =
sqlSession.getMapper(TestMapper.class).scan(limit) // 2
) {
cursor.forEach(Test -> { });
}
}
上述代码1位置
开启一个SqlSession(实际上也代表了一个数据库连接)
并保证它最后能关闭
2位置
使用 SqlSession 来获得 Mapper 对象
采用以上模式能保证得到的 Cursor 对象是打开状态的。

2.事务控制 TransactionTemplate
在 Spring 中,可以用 TransactionTemplate 来执行一个数据库事务

@GetMapping("test/2/{limit}")
public void testFun(@PathVariable("limit") int limit) throws Exception {
TransactionTemplate transactionTemplate =
new TransactionTemplate(transactionManager); // 1

transactionTemplate.execute(status -> { // 2
try (Cursor cursor = TestMapper.scan(limit)) {
cursor.forEach(test -> { });
} catch (IOException e) {
e.printStackTrace();
}
return null;
});
}
上面的代码中1处创建了一个 TransactionTemplate 对象
2处执行数据库事务
而数据库事务的内容则是调用Mapper对象的流式查询
注意这里的 Mapper 对象无需通过 SqlSession 创建

事务控制 @Transactional 注解
这个本质上和方案二一样,代码如下:

@GetMapping("test/3/{limit}")
@Transactional
public void test(@PathVariable("limit") int limit) throws Exception {
try (Cursor cursor = TestMapper.scan(limit)) {
cursor.forEach(test -> { });
}
}
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
map遍历的5种方法分享 2022-10-16 02:49:18