Spring Data is a project that gives provides repository access to different data stores. It is used for NoSQL data stores 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 data store.
Templates (like JDBCTemplate) exist for each of the data stores, so you can always get at the functionality of your underlying store.
QueryDSL can also be used to let you created fluent predicates.
Paging can be added to your queries if the underlying store supports it.
Links
Official Spring Data site.