For example MapStruct applies loose coupling using annotations, Orika the same using API, Model Mapper is convention based etc...
JMapper Framework instead applies the DRY principle ( Don't repeat yourself ) using Annotations:
the mappings are defined on fields so that they are used as configuration,
the loose coupling imposes to repeat this information.
However, with JMapper, you can choose to apply loose coupling using the XML or API configuration.
The second objective of JMapper is the Relational Mapping:
The relational mapping is the ability to map one bean toward many other and viceversa.
REAL CASE
Thinks you have a service that applies a method called "checkExistence" that needs of the fields: name and surname. This service takes as input a general object that can be everything, in our case takes three different bean: Consultant, Employee and Manager. This beans have in common only this two fields and we have need to map only these toward the service's bean.
SOLUTION
With JMapper you need to configure only the service's bean toward the others.
IMPLEMENTATION
@JGlobalMap(classes={Consultant.class, Employee.class, Manager.class})
class ServiceBean{
String name;
String surname;
//getters and setters..
}
USAGE
class Service {
RelationalJMapper<ServiceBean> mapper = new RelationalJMapper<>(ServiceBean.class);
ServiceBean serviceBean = mapper.manyToOne(bean);
// some logic
}
}
CONCLUSION
DRY principle + relational mapping = interesting implementations
Are you curious? have a look to the relational mapping wiki page, there a lot of complete and more complex examples.
p.s. JMapper has more other interesting features as static/dynamic conversions, enrichment, mapping type etc.., don't worry in the next articles i'll describe all of it ;)