Implementing a data access layer of an application has been cumbersome for quite a while. Too much boilerplate code had to be written. Domain classes were anemic and haven't been designed in a real object oriented or domain driven manner.
Using both of these technologies makes developers life a lot easier regarding rich domain model's persistence.
Nevertheless the amount of boilerplate code to implement repositories especially is still quite high. So the goal
of the repository abstraction of Spring Data is to reduce the effort t
o implement data access layers for various
persistence stores significantly.