The SOQL Lib provides functional constructs for SOQL queries in Apex.
For more details, please refer to the documentation.
You may also find this blog post about SOQL Lib interesting.
// SELECT Id FROM Account
List<Account> accounts = SOQL.of(Account.SObjectType).toList();
// SELECT Id, Name, Industry FROM Account
List<Account> accounts = SOQL.of(Account.SObjectType)
.with(Account.Id, Account.Name, Account.Industry)
.toList();
Read how to build your selector class.
public inherited sharing class SOQL_Contact extends SOQL implements SOQL.Selector {
public static final String MOCK_ID = 'SOQL_Contact';
public static SOQL_Contact query() {
return new SOQL_Contact();
}
private SOQL_Contact() {
super(Contact.SObjectType);
// default settings
with(Contact.Id, Contact.Name, Contact.AccountId)
.systemMode()
.withoutSharing()
.mockId(MOCK_ID);
}
public SOQL_Contact byAccountId(Id accountId) {
whereAre(Filter.with(Contact.AccountId).equal(accountId));
return this;
}
}
public with sharing class ExampleController {
@AuraEnabled
public static List<Contact> getAccountContacts(Id accountId) {
return SOQL_Contact.query()
.byRecordType('Partner')
.byAccountId(accountId)
.with(Contact.Email)
.toList();
}
}
Read about the features in the documentation.
- Dynamic SOQL
- Automatic binding
- Control FLS
- 3.1 User Mode
- 3.2 System Mode
- 3.3 stripInaccessible
- Control Sharings Mode
- 4.1 with sharing
- 4.2 without sharing
- 4.3 inherited sharing
- Mocking
- 5.1 Mock list of records
- 5.2 Mock single record
- 5.3 Mock with static resources
- 5.4 Mock count result
- Avoid query duplicates
- The default configuration for all queries
- Dynamic conditions
- For proper license management each repository should contain LICENSE file similar to this one.
- Each original class should contain copyright mark: Copyright (c) 2023 BeyondTheCloud.Dev