Introducing QueryBuilder

Programmatically constructing SQL queries is a common but cumbersome task. For example, consider this query that retrieves information about a hypothetical IoT device:

select Device.*, Building.name as buildingName, Site.name as siteName
from Device
join Building on buildingID = Building.id
join Site on siteID = Site.id
where Device.id = :deviceID