Suggestions

### Splitting config from runner 
e1ea585

Try splitting your configuration out of Application.java especially if you're doing this for a workshop since it makes it easier to understand how things are being put together. It makes clear the fact that there is a class for configuring the application (ApplicationClass.java) and a class that has a main method for starting the application (Application.java).

If you ever convert the application from console to war then this split will also help as you've decoupled the config from the runner itself.

### application.properties vs. application.yaml 
ca505fc

If you'd like to show off some very cool config stuff try switching from .properties to .yaml, you could also show off the multiple environment config with spring bean profiles. (application-dev.yaml, application-prod.yaml)

### @Repository annotation
20b340f

Your Repositories were missing the `@Repository` annotation. They'll likey still work as they inherit from CrudRepository (thought that's not annotated as a spring component) but it's preferred you mark them. IntelliJ will also be able to show your wirings if you do this.

### Testing for nullity
3aff053, 7a245b1, 7fb214e

Use `something == null` instead of `something.equals(null)` as the latter can only ever be true or throw a null pointer exception. If you checkout 3aff053 and run the CategoryTest class then you'll see the failing test pointing this out. In 7a245b1 you'll see how that's fixed.

### Testing for nullity, removing duplication
c665426

All of the ifNotNull methods were essentially just checking reference nullity and then returning the non-null value. You can fold this behaviour up with a `private Object ifNotNull(Object o1, Object o2)` method. I've decided to go with a static generic method `private <T> T ifNotNull(T o1, T o2)` to ensure the types are consistent.

Overall awesome work though, I look forward to the session. :+1: