MyBatis API RowBounds类是否完全扫描数据库?

时间:2017-05-19 08:50:14

标签: mybatis

当MyBatis API中的Class RowBounds从DB获取数据时,它是否进行全扫描,然后剪切由limit和offset参数设置的行?或者只是绑定数据?

2 个答案:

答案 0 :(得分:1)

如果SQL查询包含offsetlimit / fetch first n rows only,则结果集将仅返回边界内的数据。边界应用于DB端。 OFFSET 10000 LIMIT 20将生成(最多)20个记录结果集。

这可能就是你所需要的。

Rowbound不会更改SQL查询并独立运行。 Mybatis使用DB返回的整个Resultset。 例如:RowBounds(10000, 20)将跳过结果集的前10000条记录,然后获取20条记录并停止。但结果大小可能是MAX_INT。

答案 1 :(得分:0)

它确实从数据库中检索完整数据,但只返回所请求的记录数量到程序中。因此,不必担心OutOfMemory,但查询将在数据库方面花费很长时间。

另一方面,

Hibernate和Eclipselink将给定的限制计数传递到数据库,并从数据库中仅检索所需数量的记录。 Hibernate通过在其生成的SQL中使用特定于数据库供应商的SQL构造来实现此目的。 Ex-LIMIT子句在MS-SQL中,Rownum for Oracle。

如果你想在mybatis中实现同样的目标,你需要自己使用这些结构。 这很简单,您可以使用mybatis条件使SQL特定于任何数据库。