Yes, a mapper acts as a layer between objects and a data source. But you don't need to use a different mapper class to talk to different data sources; just configure the same mapper class to use a different one.

Different data sources will likely have different _serialization_ requirements, sure. For example, in a SQL DB, the serialized attributes can't be hashes or arrays, whereas that's perfectly valid in a document DB. Another example is that serialization isn't required at all for a memory store since we can simply store objects. This does mean that serialization will have to be reworked to address this.