SELECT id FROM ex_exam a LEFT JOIN ex_exam_statistic_enp_evaluate b ON a.id = b.qlh_exam_id WHERE a.type IN ("EXAM_EX_NORMAL_TYPE_NORMAL", "EXAM_TYPE_RZ") AND b.qlh_exam_id IS NULL 高效java分批查
时间: 2023-08-05 07:09:57 浏览: 190
RMSE_SPEC.m.zip_RMSE_RMSE.m文件_statistic _wave
如果数据量较大,使用分批查询能够有效减轻数据库负担和减少内存占用。以下是一个高效的Java分批查询的实现方法:
1. 定义Mapper.xml文件中的查询语句:
```
<select id="findExamIds" resultType="Long">
SELECT id FROM ex_exam a LEFT JOIN ex_exam_statistic_enp_evaluate b ON a.id = b.qlh_exam_id
WHERE a.type IN ("EXAM_EX_NORMAL_TYPE_NORMAL", "EXAM_TYPE_RZ") AND b.qlh_exam_id IS NULL
ORDER BY a.id
</select>
```
2. 在Java代码中,通过MyBatis的SqlSession实例获取Mapper接口,调用查询方法:
```
int batchSize = 1000; // 每批次查询的数量
int offset = 0; // 查询的起始位置
List<Long> idList = new ArrayList<>();
while (true) {
List<Long> batchIds = sqlSession.selectList("findExamIds", null, new RowBounds(offset, batchSize));
if (batchIds.isEmpty()) {
break;
}
idList.addAll(batchIds);
offset += batchSize;
}
```
其中,RowBounds是MyBatis提供的分页查询参数,用于指定查询结果的起始位置和数量。在循环中,每次查询batchSize条记录,直到查询结果为空为止。将查询结果保存在一个列表中,最终返回所有的id列表。
这种实现方法使用了MyBatis的selectList方法,能够高效地从数据库中获取数据,并且不会占用大量内存。同时,可以根据实际情况调整每批次查询的数量,以达到最优的查询效果。
阅读全文