当前位置: 首页 > 工具软件 > Orika > 使用案例 >

orika

萧渝
2023-12-01

Orika是什么

Orika是一个简单、快速的JavaBean拷贝框架,它能够递归地将数据从一个JavaBean复制到另一个JavaBean,这在多层应用开发中是非常有用的。

为什么要使用Orika

Orika用于简化多层之间的对象映射,避免苦苦挣扎于手工编码和基于反射的映射。

Orika致力于提供一个全面、有效、强大的Java Bean映射解决方案。Orika关注尽可能地自动化,同时根据需要提供配置和扩展实现定制。

Orika为开发者提供了如下功能:
1.映射复杂的、深层次结构性对象。
2.通过将嵌套属性映射到顶级属性,“压平”或“展开”对象,反之亦然。
3.自动创建映射,并且在部分或所有映射上自定义。
4.创建转换器,以完全控制对象图中的任何特定对象集合的映射——按类型,甚至是通过特定的属性名。
5.处理代理或增强对象(如Hibernate或各种模拟框架)
6.用一个配置应用双向映射。
7.为一个目标抽象类或接口映射到具体的实现类。
8.映射POJO属性到Lists, Arrays, and Maps。

如何使用Orika

Orika使用字节代码生成来创建具有最小开销的快速映射器。

示例

<dependency>
   <groupId>ma.glasnost.orika</groupId>
   <artifactId>orika-core</artifactId>
   <version1.4.5</version>
</dependency>
@Configuration
public class OrikaBeanMapperConfig {

    @Bean
    public OrikaBeanMapper getOrikaBeanMapper(){
        OrikaBeanMapper beanMapper=new OrikaBeanMapper();
        beanMapper.setBasePackage("com.*");
        return beanMapper;
    }
}

 

public class OrikaMapperUtil {

    /**     
     *
     * @param source     要复制的对象实例
     * @param targetCls  要生成的对象类型
     * @param sourceProperties 源对象的属性名数组
     * @param targetProperies  目标对象的属性名数组
     * @param <T> 泛型
     * @param <E> 泛型
     * @return
     */
    public static <T,E> E mapObject( T source, Class<E> targetCls, String[] sourceProperties, String[] targetProperies) {
        if(null == sourceProperties || null == targetProperies || sourceProperties.length != targetProperies.length)
        {
            throw new RuntimeException("缺失属性映射关系");
        }

        DefaultMapperFactory orikaFactory = new DefaultMapperFactory.Builder().build();

        ClassMapBuilder<?, E> orikaClassBuilder = orikaFactory.classMap( source.getClass(), targetCls);

        for(int i = 0; i < sourceProperties.length; i++)
        {
            orikaClassBuilder.field(sourceProperties[i], targetProperies[i]);
        }
        orikaClassBuilder.byDefault().register();
        E targetIntance = orikaFactory.getMapperFacade().map(source, targetCls);

        return targetIntance;
    }

 

 

public class ShopDto {

    private Integer userId;
    private String shopName;
    private String shopIntro;
   
    public AppShop transFromToEntity() {

        String[] sourceProperties = new String[]{"shopName", "shopIntro"};
        String[] targetProperties = new String[]{"name", "intro"};

        return OrikaMapperUtil.mapObject(this, AppShop.class, sourceProperties, targetProperties);
    }
}

 

@Entity
@Table(name = "shop")
public class Shop {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;

    private Integer userId;
    private String name;
    private String intro;
}

 

@RestController
@RequestMapping("/Shop")
public class ShopController {

    @PostMapping("/Info")
    public JsonResult saveShopInfo(ShopDto dto) {
        Shop shop = dto.transFromToEntity();

    }

 

 

 

 

 

 

 

 

 类似资料: