bất kỳ công cụ cho đối tượng java để ánh xạ đối tượng? [đóng cửa]


231

Tôi đang cố gắng chuyển đổi DO thành DTO bằng java và tìm kiếm công cụ tự động trước khi bắt đầu tự viết. Tôi chỉ muốn biết nếu có bất kỳ công cụ miễn phí có sẵn cho cùng.


1
Jackson (thư viện JSON) có một phương thức new ObjectMapper().convertValue(...). Jackson cũng có hỗ trợ cho chú thích và chú thích-mixins nên tôi thấy đó là một lựa chọn rất tốt.
Simon Forsberg

1
Dưới đây là một bài viết với các khung khác nhau và so sánh hiệu suất. baeldung.com/java-performance-mapping-frameworks
Christian

Câu trả lời:


105

Bạn có thể thử Dozer .

Dozer là một trình ánh xạ Java Bean sang Java Bean, sao chép đệ quy dữ liệu từ đối tượng này sang đối tượng khác. Thông thường, các loại đậu Java này sẽ có các loại phức tạp khác nhau.

Dozer hỗ trợ ánh xạ thuộc tính đơn giản, ánh xạ kiểu phức tạp, ánh xạ hai hướng, ánh xạ ẩn rõ ràng, cũng như ánh xạ đệ quy. Điều này bao gồm các thuộc tính bộ sưu tập ánh xạ cũng cần ánh xạ ở cấp độ phần tử.


24
Một thời gian rất lâu sau, tôi đến để cập nhật, tôi hy vọng bình luận của mình sẽ được đọc: Bây giờ Dozer dường như đã chết, và một lựa chọn tốt là sử dụng MapSturation, thật dễ dàng (chú thích hỗ trợ), nhanh chóng (không phản ánh ) và có vẻ an toàn (tại thời điểm này). Điều này được bao gồm trong danh sách @Pascal Thivent, nhưng tôi khuyên nó (ngay cả khi tôi gặp một số vấn đề bằng cách sử dụng nó cùng với lombok).
Alex

2
Dozer dường như được hồi sinh với phiên bản 6: mvnreposective.com/artifact/com.github.dozermapper/dozer-core
tkruse

394

Có một số thư viện xung quanh đó:

  • Commons-BeanUtils : ConvertUtils -> Các phương thức tiện ích để chuyển đổi các giá trị vô hướng Chuỗi thành các đối tượng của Lớp được chỉ định, mảng Chuỗi thành mảng của Lớp được chỉ định.

  • Commons-Lang : ArrayUtils -> Hoạt động trên mảng, mảng nguyên thủy (như int []) và mảng trình bao bọc nguyên thủy (như Integer []).

  • Khung công tác mùa xuân : Spring có một hỗ trợ tuyệt vời cho PropertyEditor, cũng có thể được sử dụng để chuyển đổi Đối tượng thành / từ Chuỗi.

  • Dozer : Dozer là một trình ánh xạ Java Bean sang Java Bean mạnh mẽ nhưng đơn giản để sao chép dữ liệu từ đối tượng này sang đối tượng khác. Thông thường, các loại đậu Java này sẽ có các loại phức tạp khác nhau.

  • ModelMapper : ModelMapper là một khung ánh xạ đối tượng thông minh tự động ánh xạ các đối tượng với nhau. Nó sử dụng một cách tiếp cận dựa trên quy ước để ánh xạ các đối tượng trong khi cung cấp một API an toàn tái cấu trúc đơn giản để xử lý các trường hợp sử dụng cụ thể.

  • MapSturation : MapSturation là một trình tạo mã thời gian biên dịch cho ánh xạ bean, dẫn đến nhanh (không sử dụng phản xạ hoặc tương tự), mã ánh xạ phụ thuộc và loại an toàn khi chạy.

  • Orika : Orika sử dụng việc tạo mã byte để tạo ra các trình ánh xạ nhanh với chi phí tối thiểu.

  • Selma : Trình tạo mã thời gian biên dịch cho ánh xạ

  • JMapper : Tạo trình ánh xạ Bean bằng cách sử dụng Chú thích, XML hoặc API (dường như đã chết, được cập nhật lần cuối 2 năm trước)

  • Smooks : Smooks JavaBean Cartridge cho phép bạn tạo và điền các đối tượng Java từ dữ liệu tin nhắn của bạn (tức là liên kết dữ liệu với) (được đề xuất bởi superfilin trong các bình luận). (Không còn được phát triển tích cực)

  • Commons-Convert : Commons-Convert nhằm mục đích cung cấp một thư viện duy nhất dành riêng cho nhiệm vụ chuyển đổi một đối tượng thuộc loại này sang loại khác. Giai đoạn đầu tiên sẽ tập trung vào chuyển đổi Object to String và String to Object. (dường như đã chết, bản cập nhật cuối 2010)

  • Transmorph : Transmorph là một thư viện java miễn phí được sử dụng để chuyển đổi một đối tượng Java thuộc một loại thành một đối tượng thuộc loại khác (với một chữ ký khác, có thể được tham số hóa). (dường như đã chết, bản cập nhật cuối cùng 2013)

  • EZMorph : EZMorph là thư viện java đơn giản để chuyển đổi một đối tượng sang một đối tượng khác. Nó hỗ trợ các phép biến đổi cho nguyên thủy và Đối tượng, cho các mảng và biến đổi đa chiều với DynaBeans (dường như đã chết, cập nhật lần cuối năm 2008)

  • Morph : Morph là một khung công tác Java giúp giảm khả năng tương tác bên trong của một ứng dụng. Khi thông tin chảy qua một ứng dụng, nó trải qua nhiều biến đổi. Morph cung cấp một cách tiêu chuẩn để thực hiện các biến đổi này. (dường như đã chết, bản cập nhật cuối cùng 2008)

  • Lorentz : Lorentz là một khung chuyển đổi đối tượng chung thành đối tượng. Nó cung cấp một API đơn giản để chuyển đổi một đối tượng Java thuộc loại này thành đối tượng của loại khác. (dường như đã chết)

  • OTOM : Với OTOM, bạn có thể sao chép mọi dữ liệu từ bất kỳ đối tượng nào sang bất kỳ đối tượng nào khác. Các khả năng là vô tận. Chào mừng đến với "Mùa thu". (dường như đã chết)


không có danh sách nào hỗ trợ chú thích :(
ravinikam

1
Commons-Convert dường như không chỉ im lìm mà hoàn toàn biến mất ngay bây giờ ...
Jim Ferrans

Trên thực tế, nếu bạn muốn thêm Moo vào danh sách của mình, thì tôi có thể xóa câu trả lời của mình, vì câu trả lời của bạn rõ ràng hoàn chỉnh hơn nhiều. ;)
Geoffrey Wiseman

3
Một tùy chọn khác cho Java 8+: erchu.github.io/bean-cp (từ chối trách nhiệm: Tôi là tác giả của dự án này)
Rafal

1
@TmTron: Xong và tôi đã chỉnh sửa câu trả lời để xóa cảnh cáo và tham chiếu URL repo (vì trang chính vẫn tham chiếu 0.7.5)
patric.schenke

31

Một cái khác là Orika - https://github.com/orika-mapper/orika

Orika là một khung công tác ánh xạ Java Bean sao chép dữ liệu (trong số các khả năng khác) dữ liệu từ đối tượng này sang đối tượng khác. Nó có thể rất hữu ích khi phát triển các ứng dụng nhiều lớp.

Orika tập trung vào việc tự động hóa càng nhiều càng tốt, đồng thời cung cấp tùy chỉnh thông qua cấu hình và tiện ích mở rộng khi cần thiết.

Orika cho phép nhà phát triển:

  • Bản đồ các đối tượng phức tạp và có cấu trúc sâu
  • Các đối tượng "Làm phẳng" hoặc "Mở rộng" bằng cách ánh xạ các thuộc tính lồng vào các thuộc tính cấp cao nhất và ngược lại
  • Tạo trình ánh xạ nhanh chóng và áp dụng các tùy chỉnh để kiểm soát một số hoặc tất cả ánh xạ
  • Tạo các trình chuyển đổi để kiểm soát hoàn toàn việc ánh xạ một tập hợp các đối tượng cụ thể ở bất kỳ đâu trong biểu đồ đối tượng - theo loại hoặc thậm chí theo tên thuộc tính cụ thể
  • Xử lý các proxy hoặc các đối tượng nâng cao (như các đối tượng của Hibernate hoặc các khung giả khác nhau)
  • Áp dụng ánh xạ hai chiều với một cấu hình
  • Ánh xạ tới các thể hiện của một lớp cụ thể thích hợp cho một lớp hoặc giao diện trừu tượng đích
  • Xử lý ánh xạ ngược
  • Xử lý các quy ước phức tạp ngoài các thông số kỹ thuật của JavaBean.

Orika sử dụng việc tạo mã byte để tạo các trình ánh xạ nhanh với chi phí tối thiểu.


2
bạn có thể cung cấp một vài từ về orika - điều làm cho nó khác biệt với những người khác
Olimpiu POP

Nó có thể nhanh hơn nhiều so với Dozer - dozer yên tĩnh chậm.
Ondrej Bozek

21

ModelMapper là một thư viện đáng để kiểm tra. Thiết kế của ModelMapper khác với các thư viện khác ở chỗ:

  • Tự động ánh xạ các mô hình đối tượng bằng cách kết hợp thông minh các thuộc tính nguồn và đích
  • Cung cấp API tái cấu trúc an toàn sử dụng mã thực tế để ánh xạ các trường và phương thức thay vì sử dụng chuỗi
  • Sử dụng cấu hình dựa trên quy ước để xử lý đơn giản các kịch bản tùy chỉnh

Kiểm tra trang ModelMapper để biết thêm thông tin:

http://modelmapper.org


13

Sử dụng Apache commons beanutils:

static void copyProperties(Object dest, Object orig) -Copy giá trị thuộc tính từ bean gốc đến bean đích cho tất cả các trường hợp tên thuộc tính giống nhau.

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


3
yeh, nhưng các thuộc tính có trong bean nguồn, nhưng không có trong bean đích chỉ đơn giản là bị bỏ qua. Dù sao cũng cảm ơn Pablojim :) Tôi nghĩ rằng tôi phải đi với Dozer vì chúng tôi có một số tên tài sản khác nhau cho DO và DTO :(
ravinikam

1
Đủ công bằng - Tôi không biết điều này ... Danh sách của Pascal khá ấn tượng!
Pablojim


3

Tôi khuyên bạn nên thử JMapper Framework .

Nó là một trình ánh xạ đậu Java sang Java bean, cho phép bạn thực hiện việc truyền dữ liệu một cách linh hoạt với các chú thích và / hoặc XML.

Với JMapper, bạn có thể:

  • Tạo và làm phong phú các đối tượng mục tiêu
  • Áp dụng một logic cụ thể để ánh xạ
  • Tự động quản lý tệp XML
  • Thực hiện các mối quan hệ 1 đến N và N thành 1
  • Thực hiện chuyển đổi rõ ràng
  • Áp dụng cấu hình kế thừa

2

Tôi rất vui khi thêm Moo làm tùy chọn, mặc dù rõ ràng tôi thiên về nó: http://geoffreywiseman.github.com/Moo/

Nó rất dễ sử dụng cho các trường hợp đơn giản, có khả năng hợp lý cho các trường hợp phức tạp hơn, mặc dù vẫn còn một số lĩnh vực mà tôi có thể tưởng tượng việc tăng cường nó cho những sự phức tạp hơn nữa.


2

Bạn cũng có thể thử khung ánh xạ dựa trên Dozer, nhưng với khai báo ánh xạ Excel. Họ đã có một số công cụ và các tính năng thú vị bổ sung. Kiểm tra tại http://openl-tablets.sf.net/mapper

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.