Lightning Data Service
If we have multiple custom components on a page with its own Apex controller, we can easily repeat SOQL queries.
Let's take a look at a scenario wherein multiple components have their own SOQL query, and there is no data sharing between components, as illustrated in the following diagram:

Lightning Data Service provides the following advantages:
- Introduces the sharing of data via a common cache implementation.
- Avoids the need to write Apex, and also takes care of CRUD/FLS and DML security settings configured by the administrator.
The following diagram shows how the data flow is simplified with Lightning Data Service, with the ability to cache and share the data:

Loading Salesforce record context data using force:recordData
The force:recordData component allows us to load the record from the Salesforce object, using recordId. recordId on the standard record page can be obtained by implementing the force:hasRecordId interface, shown as follows:
<aura:component implements...