When using Handle, use the Handle.inTransaction method (to return a result) or Handle.useTransaction method (does not return a result). Any SQL statements you execute inside the transaction callback will be part of the transaction.
When using SQL objects, annotate the method with a @Transaction annotation--typically on an interface default method. Any SQL statements you execute inside that method (including calls to other methods on the SQL object interface) will be part of the transaction.
If it's important that your query results match a particular snapshot of the database, you will want to configure the transaction isolation to the appropriate level when you open the transaction.
Hope this helps!