Step 6 - Introducing a read-only repository base interface.

Introduced ReadOnlyRepository to capture all read-only repository methods of CrudRepository and PagingAndSortingRepository. It also fixes the the type of the ID property to Long. Added Product domain class, sample data as well as an extension of ReadOnlyRepository to declare a query method to find Product instances containing a given description.
Step 7 - Adding a manually declared query method.

Introduced a method to lookup products by key and value using the @Query annotation.
Step 8 - Flexible predicate execution.

Added Querydsl as dependency as well as the appropriate setup of the APT processor and IDE integration. Let CustomerRepository extend QuerydslPredicateExecutor and use the API in the integration test to find customers.
Step 9 - Adding custom implementation method.
Step 10 - Added shell script to automatically build each step.

Added script that will iterate through the entire Git history and build the project for each commit to make sure that each commit itself is compileable and executable.