자바 객체 대 객체 매핑을위한 도구? [닫은]


231

java를 사용하여 DO를 DTO로 변환하려고 시도하고 자체 작성을 시작하기 전에 자동화 된 도구를 찾고 있습니다. 나는 무료로 사용할 수있는 무료 도구가 있는지 알고 싶었습니다.


1
Jackson (JSON 라이브러리)에는 메소드가 new ObjectMapper().convertValue(...)있습니다. Jackson은 주석 및 주석 믹스 인도 지원하므로 매우 좋은 옵션입니다.
Simon Forsberg

1
다른 프레임 워크와 성능 비교가있는 기사가 있습니다. baeldung.com/java-performance-mapping-frameworks
Christian

답변:


105

당신은 Dozer를 시도 할 수 있습니다.

Dozer는 한 객체에서 다른 객체로 데이터를 재귀 적으로 복사하는 Java Bean to Java Bean 매퍼입니다. 일반적으로 이러한 Java Bean은 다른 복합 유형입니다.

Dozer는 단순 특성 맵핑, 복합 유형 맵핑, 양방향 맵핑, 암시 적 명시 적 맵핑 및 재귀 맵핑을 지원합니다. 여기에는 요소 레벨에서 맵핑해야하는 맵핑 콜렉션 속성도 포함됩니다.


24
아주 오랜 시간이 지나서 업데이트를하게되었으므로 의견을 읽을 수 있기를 바랍니다. 이제 Dozer는 죽은 것처럼 보이며 좋은 옵션은 MapStruct를 사용하는 것입니다. ) 안전합니다 (현재). 이것은 @Pascal Thivent 목록에 포함되어 있지만 롬복과 함께 사용하여 문제가있는 경우에도 권장합니다.
Alex

2
: 도저 버전 6으로 부활 것 같다 mvnrepository.com/artifact/com.github.dozermapper/dozer-core
tkruse

394

주변에는 몇 가지 라이브러리가 있습니다.

  • Commons-BeanUtils : ConvertUtils-> 문자열 스칼라 값을 지정된 클래스의 객체로 변환하는 유틸리티 메소드, 문자열 배열은 지정된 클래스의 배열로 변환합니다.

  • Commons-Lang : ArrayUtils-> 배열, int []와 같은 기본 배열 및 Integer []와 같은 기본 래퍼 배열에 대한 작업.

  • 스프링 프레임 워크 : Spring은 PropertyEditors를 훌륭하게 지원하며, 객체를 문자열로 /로부터 변환하는 데에도 사용할 수 있습니다.

  • Dozer : Dozer는 강력하면서도 간단한 Java Bean to Java Bean 매퍼로서 한 오브젝트에서 다른 오브젝트로 데이터를 재귀 적으로 복사합니다. 일반적으로 이러한 Java Bean은 다른 복합 유형입니다.

  • ModelMapper : ModelMapper는 자동으로 객체를 서로 매핑하는 지능형 객체 매핑 프레임 워크입니다. 특정 사용 사례를 처리하기위한 간단한 리팩토링 안전 API를 제공하면서 규칙 기반 접근 방식을 사용하여 객체를 매핑합니다.

  • MapStruct : MapStruct는 Bean 맵핑을위한 컴파일 타임 코드 생성기이므로 런타임시 빠른 (반사 또는 이와 유사한 사용법이 없음) 종속성이없고 유형이 안전한 맵핑 코드를 생성합니다.

  • Orika : Orika는 바이트 코드 생성을 사용하여 최소한의 오버 헤드로 빠른 매퍼를 만듭니다.

  • Selma : 매핑을위한 컴파일 타임 코드 생성기

  • JMapper : 콩 매퍼 생성 주석, XML 또는 API를 사용하여 (죽은, 마지막으로 업데이트 2 년 전 것)

  • Smooks 다음 Smooks 자바 빈즈 카트리지 만들고 자바 메시지 데이터에서 개체를 채울 수 있습니다 (에 즉, 바인딩 데이터) (제안 superfilin 의견). (더 이상 적극적으로 개발하지 않음)

  • Commons-Convert : Commons-Convert는 한 유형의 오브젝트를 다른 유형으로 변환하는 태스크 전용의 단일 라이브러리를 제공하는 것을 목표로합니다. 첫 번째 단계는 Object to String 및 String to Object 변환에 중점을 둡니다. (죽은 것, 마지막 업데이트 2010)

  • Transmorph : Transmorph은 한 유형의 Java 객체를 다른 유형의 객체로 변환하는 데 사용되는 무료 Java 라이브러리입니다 (다른 서명을 사용하여 매개 변수화 가능). (죽은 것으로 보인다, 마지막 업데이트 2013)

  • EZMorph : EZMorph는 Object를 다른 Object로 변환하기위한 간단한 Java 라이브러리입니다. 그것은 DynaBeans와 다차원 배열 및 변환을위한 기본 요소와 객체에 대한 변환을 지원 (것 죽은, 지난 2008 업데이트)

  • Morph : Morph는 애플리케이션의 내부 상호 운용성을 용이하게하는 Java 프레임 워크입니다. 정보가 응용 프로그램을 통해 흐르면 정보가 여러 번 변환됩니다. Morph는 이러한 변환을 구현하는 표준 방법을 제공합니다. (죽은 것, 마지막 업데이트 2008)

  • Lorentz : Lorentz는 일반적인 객체 간 변환 프레임 워크입니다. 한 유형의 Java 오브젝트를 다른 유형의 오브젝트로 변환하는 간단한 API를 제공합니다. (죽은 것처럼 보인다)

  • OTOM : OTOM을 사용하면 모든 객체에서 다른 객체로 데이터를 복사 할 수 있습니다. 가능성은 끝이 없습니다. "가을"에 오신 것을 환영합니다. (죽은 것처럼 보인다)


주석을 지원하는 목록은 없습니다 :(
ravinikam

1
가공 - 변환은 휴면하지 보이지만 완전히 ... 지금은 사라
짐 Ferrans

사실, 당신이 당신의 목록에 Moo를 추가하고 싶다면, 당신의 대답이 훨씬 더 완전하기 때문에 나는 대답을 제거 할 수 있습니다. ;)
Geoffrey Wiseman

3
Java 8+의 또 다른 옵션 : erchu.github.io/bean-cp (면책 조항 : 저는이 프로젝트의 저자입니다)
Rafal

1
@TmTron은 : 완료 나는 파업을 제거하고 (여전히 참조 메인 페이지부터 0.7.5)에 환매 특약 URL을 참조 할 대답을 편집
patric.schenke을

31

- 또 다른 하나는 Orika입니다 https://github.com/orika-mapper/orika

Orika는 한 객체에서 다른 객체로 데이터를 재귀 적으로 복사하는 Java Bean 매핑 프레임 워크입니다. 다층 애플리케이션을 개발할 때 매우 유용 할 수 있습니다.

Orika는 가능한 한 자동화에 초점을 맞추고 필요한 경우 구성 및 확장을 통해 사용자 지정을 제공합니다.

Orika를 통해 개발자는 다음을 수행 할 수 있습니다.

  • 복잡하고 깊이 구조화 된 객체 매핑
  • 중첩 된 속성을 최상위 속성에 매핑하거나 그 반대로 "Flatten"또는 "Expand"개체
  • 매퍼를 즉시 생성하고 사용자 정의를 적용하여 일부 또는 모든 매핑을 제어
  • 유형별 또는 특정 속성 이름별로 객체 그래프의 특정 위치에 대한 특정 객체의 매핑을 완벽하게 제어 할 수있는 변환기를 만듭니다.
  • 프록시 또는 고급 개체 (Hibernate 또는 다양한 모의 프레임 워크와 같은) 처리
  • 하나의 구성으로 양방향 매핑 적용
  • 대상 추상 클래스 또는 인터페이스에 적합한 구체적인 클래스의 인스턴스에 매핑
  • 역 매핑 처리
  • JavaBean 스펙 이외의 복잡한 규칙을 처리하십시오.

Orika는 바이트 코드 생성을 사용하여 최소한의 오버 헤드로 빠른 매퍼를 만듭니다.


2
당신은 orika에 대한 몇 마디를 제공 할 수 있습니다
Olimpiu POP

아마도 도저보다 훨씬 빠릅니다. 도저는 조용히 느립니다.
Ondrej Bozek

21

ModelMapper 는 체크 아웃 할 가치가있는 또 다른 라이브러리입니다. ModelMapper의 디자인은 다음과 같은 점에서 다른 라이브러리와 다릅니다.

  • 소스 및 대상 속성을 지능적으로 일치시켜 개체 모델을 자동으로 매핑
  • 문자열을 사용하지 않고 실제 코드를 사용하여 필드와 메소드를 맵핑하는 리팩토링 안전 맵핑 API를 제공합니다.
  • 사용자 지정 시나리오를 간단하게 처리하기 위해 컨벤션 기반 구성을 활용합니다.

자세한 정보는 ModelMapper 사이트를 확인하십시오.

http://modelmapper.org


13

Apache commons beanutils를 사용하십시오.

static void copyProperties(Object dest, Object orig) -속성 이름이 동일한 모든 경우에 대해 원본 Bean에서 대상 Bean으로 특성 값을 복사하십시오.

http://commons.apache.org/proper/commons-beanutils/


3
그러나 소스 Bean에 있지만 대상 Bean에없는 특성은 단순히 무시됩니다. 덕분에 어쨌든 Pablojim는 : 나는 우리가 :( DO와 DTO에 대해 서로 다른 몇 가지 속성 이름이 있기 때문에 도저 함께 가야한다고 생각
ravinikam

1
충분히 공정하다 – 나는 이것을 몰랐다. Pascal의 목록은 꽤 인상적이었다!
Pablojim


3

JMapper Framework 를 사용해보십시오 .

Java bean에서 Java bean mapper로 주석 및 / 또는 XML을 사용하여 데이터를 동적으로 전달할 수 있습니다.

JMapper를 사용하면 다음을 수행 할 수 있습니다.

  • 대상 객체 생성 및 보강
  • 특정 논리를 매핑에 적용
  • XML 파일 자동 관리
  • 1 대 N 및 N 대 1 관계 구현
  • 명시 적 전환 구현
  • 상속 된 구성 적용

2

나는 분명히 옵션에 대해 편견을 가지고 있지만 Moo를 옵션으로 추가하게되어 기쁩니다 : http://geoffreywiseman.github.com/Moo/

간단한 경우에는 사용하기가 쉽고 더 복잡한 경우에는 합리적이지만 여전히 더 복잡한 경우를 위해 향상시킬 수있는 영역이 있습니다.


2

Dozer를 기반으로하지만 Excel 매핑 선언을 사용하여 매핑 프레임 워크를 시도 할 수도 있습니다. 그들은 몇 가지 도구와 추가 멋진 기능을 가지고 있습니다. http://openl-tablets.sf.net/mapper 에서 확인하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.