mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-08 01:28:24 +08:00
docs: 添加游标查询的相关文档
This commit is contained in:
parent
04eb9094d8
commit
639914a65e
@ -25,6 +25,38 @@
|
|||||||
- **selectCountByCondition**:根据 QueryWrapper 查询数据量。
|
- **selectCountByCondition**:根据 QueryWrapper 查询数据量。
|
||||||
- **selectCountByQuery**:根据 QueryWrapper 查询数据量。
|
- **selectCountByQuery**:根据 QueryWrapper 查询数据量。
|
||||||
|
|
||||||
|
## 游标查询
|
||||||
|
|
||||||
|
我们对大量数据进行处理时,为防止方法内存泄漏情况,应该使用游标(Cursor)方式进行数据查询并处理数据。
|
||||||
|
在 `BaseMapper` 中,存在如下的游标查询方法:
|
||||||
|
|
||||||
|
```java
|
||||||
|
Cursor<T> selectCursorByQuery(QueryWrapper queryWrapper);
|
||||||
|
```
|
||||||
|
其使用方法如下:
|
||||||
|
|
||||||
|
```java
|
||||||
|
Db.tx(() -> {
|
||||||
|
Cursor<Account> accounts = accountMapper.selectCursorByQuery(query);
|
||||||
|
for (Account account : accounts) {
|
||||||
|
System.out.println(account);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
以上的示例中,数据库并**不是**把所有的数据一次性返回给应用,而是每循环 1 次才会去数据库里拿 1 条数据,这样,就算有 100w 级数据,也不会导致我们应用内存溢出,同时,在 for 循环中,
|
||||||
|
我们可以随时终止数据读取。
|
||||||
|
|
||||||
|
但由于游标查询是在 for 循环的时候,才去数据库拿数据。因此必须保证 `selectCursorByQuery` 方法及其处理必须是在事务中进行,才能保证其链接并未与数据库断开。
|
||||||
|
|
||||||
|
**以下场景经常需要用到游标查询功能:**
|
||||||
|
|
||||||
|
- 1、数据查询并写入到缓存
|
||||||
|
- 2、Excel 导出等
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 多表查询(关联查询)
|
## 多表查询(关联查询)
|
||||||
|
|
||||||
在 `BaseMapper` 中,提供了 `selectOneByQueryAs`、`selectListByQueryAs` 、`paginateAs` 等方法,用于处理关联查询的场景。
|
在 `BaseMapper` 中,提供了 `selectOneByQueryAs`、`selectListByQueryAs` 、`paginateAs` 等方法,用于处理关联查询的场景。
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user