Pick an entity → build a query → POST as JSON to /api/<entity>/search → backend translates to SQL via QueryBuilderWalker<T> → render PagedResult<T> in a <bs-datatable>. Pagination / filtering / sorting are all server-side.
The component is JSON-only by design — schema validation and translation to your storage layer (SQL, OData, Mongo, …) belong on the server, where the user-controlled tree can be safely walked. The example below is what query() serialises to when the user picks status equals shipped AND total > 100.