Step 2 - Enable Spring Data JPA repositories.

Add CustomerRepository, add query and save(…) methods as well as test cases executing them.
Step 3 - Move to CrudRepository.

Switch to CrudRepository as base interface and add appropriate test cases.
Step 4 - Moving on to PagingAndSortingRepository.

Moved to PagingAndSortingRepository and added according integration tests.
Step 5 - Redeclaring existing CRUD methods.

Overriding findAll() to show JpaRepository actually returns a List. Overriding save(…) to customize transaction configuration.
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.