Vaadin Tip: Lazy Loading and Item Identity
Lazy Loading
When using grids, trees or any other of multi-valued component with Vaadin you often want to display data from a database table and typically you have more than a few rows in the database. In this case loading thousands or even millions of records don’t make sense and would be a huge performance problem. For this use case Vaadin provides lazy loading using a CallbackDataProvider
.
To create a CallBackDataProvider
you must implement a CountCallback
and a FetchCallback
. The CountCallback
is used to provide the total number of records. And the FetchCallback
is used for paging. Both methods receive a Query
object that contains filter, sorting, offset and limit.
In this example you can see how to use offset and limit.
1 2 3 4 | DataProvider<Employee, Void> dataProvider = new CallbackDataProvider<>( query -> employeeRepository.findAll(query.getOffset(), query.getLimit()), query -> employeeRepository.count() ); |
Item Identity
In a Grid
or the DataProvider
there are methods that are using an item:
1 2 | grid.select(employee); dataProvider.refreshItem(employee); |
Ever wondered how Vaadin is finding the right item in the underlying data structure? No surprise – it uses equals()
. But what if you can’t control how equals()
is implemented? For example if the Class that you use in the Grid is generated directly from the database tables like jOOQ does?
No worries! Vaadin provides another constructor to create a CallbackDataProvivder
As a third parameter you pass a ValueProvider
that is responsible to return a unique identifier. In the example this is the ID of the Employee.
1 2 3 4 5 | DataProvider<Employee, Void> dataProvider = new CallbackDataProvider<>( query -> employeeRepository.findAll(query.getOffset(), query.getLimit()), query -> employeeRepository.count(), Employee::getId ); |
What’s next?
Never heard of Vaadin? Stay tuned there will be a Vaadin introduction coming soon!
Published on Java Code Geeks with permission by Simon Martinelli, partner at our JCG program. See the original article here: Vaadin Tip: Lazy Loading and Item Identity Opinions expressed by Java Code Geeks contributors are their own. |