Spring Data is a project that gives provides repository access to different datastores. It is used for NoSQL datastores too.
The repositories that are created have the standard CRUD methods, but you can also pick a higher level interface and implement that instead.
You can provide custom mapping between your domain and datastore.
Templates (like JDBCTemplate) exist for each of the datastores, so you can always get at the functionality of your underlying store.
QueryDSL can also be used to let you created predicates in a fluent way.
Paging can be added to your queries if the underlying store supports it.
Official Spring Data site.