vaadin
延迟加载
在Vaadin中使用网格,树或任何其他多值组件时,您通常希望显示数据库表中的数据,并且通常数据库中有多行。 在这种情况下,加载数千甚至数百万条记录是没有意义的,这将是一个巨大的性能问题。 对于此用例,Vaadin使用CallbackDataProvider
提供延迟加载。
要创建CallBackDataProvider
,必须实现CountCallback
和FetchCallback
。 CountCallback
用于提供记录总数。 FetchCallback
用于分页。 这两种方法都将接收一个包含过滤器,排序,偏移量和限制的Query
对象。
在此示例中,您可以看到如何使用偏移量和限制。
DataProvider<Employee, Void> dataProvider = new CallbackDataProvider<>(
query -> employeeRepository.findAll(query.getOffset(), query.getLimit()),
query -> employeeRepository.count()
);
物品识别
在Grid
或DataProvider
有正在使用的项目的方法:
grid.select(employee);
dataProvider.refreshItem(employee);
有没有想过Vaadin如何在底层数据结构中找到合适的项目? 毫不奇怪-它使用equals()
。 但是,如果您无法控制equals()
的实现方式,该怎么办? 例如,如果您在网格中使用的类是像jOOQ这样直接从数据库表中生成的呢?
别担心! Vaadin提供了另一个构造函数来创建CallbackDataProvivder
作为第三个参数,您传递一个ValueProvider
,该ValueProvider
负责返回唯一标识符。 在示例中,这是员工的ID。
DataProvider<Employee, Void> dataProvider = new CallbackDataProvider<>(
query -> employeeRepository.findAll(query.getOffset(), query.getLimit()),
query -> employeeRepository.count(),
Employee::getId
);
下一步是什么?
从未听说过Vaadin吗? 敬请期待即将推出的Vaadin简介!
翻译自: https://www.javacodegeeks.com/2020/06/vaadin-tip-lazy-loading-and-item-identity.html
vaadin