背景
BeanMapping是什么? 请查看我之前的一篇文章: 我也造了个轮子:BeanMapping(属性拷贝)
现状
目前代码经过在一个实际项目中进行试用,该项目为公司的核心业务逻辑(产品页面数据),目前表现良好。
在原先的1.0.0版本基础上修复了几个bug,目前推荐使用1.0.1。
下载
url : https://github.com/agapple/mapping4java/tags
mvn仓库:
<dependency>
<groupId>com.googlecode.mapping4java</groupId>
<artifactId>mapping</artifactId>
<version>1.0.1</version>
</dependency>
Example1:
Step 1 (define mapping config)
<bean-mappings xmlns="http://mapping4java.googlecode.com/schema/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://mapping4java.googlecode.com/schema/mapping http://mapping4java.googlecode.com/svn/trunk/src/main/resources/META-INF/mapping.xsd">
<!-- (bean-bean) mapping 测试 -->
<bean-mapping batch="true" srcClass="com.agapple.mapping.object.SrcMappingObject" targetClass="com.agapple.mapping.object.TargetMappingObject" reversable="true">
<field-mapping srcName="intValue" targetName="intValue" />
<field-mapping targetName="integerValue" script="src.intValue + src.integerValue" /> <!-- 测试script -->
<field-mapping srcName="start" targetName="start" />
<field-mapping srcName="name" targetName="targetName" /> <!-- 注意不同名 -->
<field-mapping srcName="mapping" targetName="mapping" mapping="true" />
</bean-mapping>
<bean-mapping batch="true" srcClass="com.agapple.mapping.object.NestedSrcMappingObject" targetClass="com.agapple.mapping.object.NestedTargetMappingObject" reversable="true">
<field-mapping srcName="name" targetName="name" defaultValue="ljh" /> <!-- 测试default value -->
<field-mapping srcName="bigDecimalValue" targetName="value" targetClass="string" defaultValue="10" /> <!-- 测试不同名+不同类型+default value -->
</bean-mapping>
</bean-mappings>
Step 2 (do mapping)
public BeanMapping srcMapping = BeanMapping.create(SrcMappingObject.class, TargetMappingObject.class);
public BeanMapping targetMapping = BeanMapping.create(TargetMappingObject.class , SrcMappingObject.class);
@Test
public void testBeanToBean_ok() {
SrcMappingObject srcRef = new SrcMappingObject();
srcRef.setIntegerValue(1);
srcRef.setIntValue(1);
srcRef.setName("ljh");
srcRef.setStart(true);
TargetMappingObject targetRef = new TargetMappingObject();// 测试一下mapping到一个Object对象
srcMapping.mapping(srcRef, targetRef);
SrcMappingObject newSrcRef = new SrcMappingObject();// 反过来再mapping一次
targetMapping.mapping(targetRef, newSrcRef);
}
Example2: (和BeanUtils/BeanCopier一样的使用,根据同名属性进行自动映射,不需要定义任何的mapping.xml)
public BeanCopy srcCopy = BeanCopy.create(SrcMappingObject.class, TargetMappingObject.class);
public BeanCopy targetCopy = BeanCopy.create(TargetMappingObject.class , SrcMappingObject.class);
@Test
public void testBeanToBean_ok() {
SrcMappingObject srcRef = new SrcMappingObject();
srcRef.setIntegerValue(1);
srcRef.setIntValue(1);
srcRef.setName("ljh");
srcRef.setStart(true);
TargetMappingObject targetRef = new TargetMappingObject();// 测试一下mapping到一个Object对象
srcCopy.copy(srcRef, targetRef);
SrcMappingObject newSrcRef = new SrcMappingObject();// 反过来再mapping一次
targetCopy.copy(targetRef, newSrcRef);
}
Example3: (和BeanUtils一样,处理map<->bean)
public BeanMap beanMap = BeanMap.create(SrcMappingObject.class);
@Test
public void testDescribe_Populate_ok() {
SrcMappingObject srcRef = new SrcMappingObject();
srcRef.setIntegerValue(1);
srcRef.setIntValue(1);
srcRef.setName("ljh");
srcRef.setStart(true);
Map map = beanMap.describe(srcRef);
SrcMappingObject newSrcRef = new SrcMappingObject();// 反过来再mapping一次
beanMap.populate(newSrcRef, map);
}
其他
ChangeLog
Release 1.0.1
"this" symbol GetExecutor bugfix
boolean isSuccessed generated set/get methods for the isSucessed()/setSuccessed(), should filter attribute is the prefix
Add date and sqlDate convertor
Add String and Enum convertor
Add mapping.propertis define ValueProcess plugins
Release 1.0.0
Initial mapping code