几乎所有的配置都可以分为全局 mapping 和字段级的配置 , 按自己的需要配置吧 !!!
注意 :Dozer 是绝大多数操作是根据 getter 和 setter 方法来执行的 , 所以如果你没有定义这些方法的话 ……… 后果自负吧 !!
最好结合 Dozer 的源码去看 , 效果会非常非常非常的好
根据给我介绍 Dozer 的老师的习惯用语 , 称之为 ” 好厉害的 DozerMapper” 配置方法 :
关闭默认的自动映射 , 即只有定义的字段才映射复制 ( wildcard
属性value=false|true 默认)
<mapping wildcard="false"> <class-a>org.dozer.vo.AnotherTestObject</class-a> <class-b>org.dozer.vo.AnotherTestObjectPrime</class-b> <field> <a>field1</a> <b>field1</b> </field> </mapping> 指定的属性字段不进行复制(<field-exclude> ) <field-exclude> <a>fieldToExclude</a> <b>fieldToExclude</b> </field-exclude>
<field-exclude type="one-way""> <a>fieldToExclude</a> <b>fieldToExclude</b> </field-exclude> 如果源字段的值是null的,那么就不执行setter方法去给目标属性赋值
<mapping map-null="false"> <class-a>org.dozer.vo.AnotherTestObject</class-a> <class-b>org.dozer.vo.AnotherTestObjectPrime</class-b>
<field> <a>field4</a> <b>to.one</b> </field> </mapping>
OR...
<mapping> <class-a>org.dozer.vo.AnotherTestObject</class-a> <class-b map-null="false">org.dozer.vo.AnotherTestObjectPrime</class-b> <field> <a>field4</a> <b>to.one</b> </field>
</mapping>
还有一种String的空 ("") <mapping map-empty-string="false"> <class-a>org.dozer.vo.AnotherTestObject</class-a> <class-b>org.dozer.vo.AnotherTestObjectPrime</class-b> <field> <a>field4</a> <b>to.one</b> </field> </mapping> OR... <mapping> <class-a>org.dozer.vo.AnotherTestObject</class-a> <class-b map-empty-string="false">org.dozer.vo.AnotherTestObjectPrime</class-b>
<field> <a>field4</a> <b>to.one</b> </field> </mapping>
有时候需要将某类型为数组或者集合( 下标) 的一项复制给另外一个字段, 那么就需要下面的配置了, 支持索引的映射: <mapping> <class-a>org.dozer.vo.Individuals</class-a> <class-b>org.dozer.vo.FlatIndividual</class-b> <field> <a>usernames[0]</a> <b>username1</b> </field> <field> <a>usernames[1]</a> <b>username2</b> </field> <field> <a>individual.username</a> <b>username2</b> </field> <field> <a>secondNames[1]</a> <b>secondName1</b> </field> <field> <a>secondNames[2]</a> <b>secondName2</b> </field> <field> <a>aliases.otherAliases[0]</a> <b>primaryAlias</b> </field> </mapping>
困了, 以后再继续吧..