日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

dozer bean_使用Dozer框架进行Bean操作

發布時間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dozer bean_使用Dozer框架进行Bean操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

dozer bean

介紹

如您所知,您可以在任何操作系統中將文件或文件夾從源位置復制到目標位置。 您是否考慮過復制基本上是POJO的java對象? 在很多情況下,您需要將源bean的內容復制到目標bean。 我不關心對象的拷貝構造函數,淺拷貝或深拷貝或克隆。 在某些情況下,無論是否具有過濾條件,您都必須將源bean的內容復制到目標位置。 這樣做的原因可能有很多,而實現它的方法有很多。 在這篇小文章中,我將向您簡要介紹一個名為“推土機”的框架,以最簡單,最可靠的方式實現此功能。

技術性

這篇小文章將為您提供“推土機”框架實用程序,將源Bean復制到目標Bean。 在開始之前,讓我們考慮以下情況:您有一個包含很多字段的源Bean,并且該源Bean屬于另一個項目或模塊。 現在,您想將Bean作為Web服務REST服務開發的一部分向外界公開。 不建議這樣做。 可能有以下原因。

  • 源系統由于安全漏洞而不允許這樣做。
  • 源Bean未序列化并且是最終類。
  • 源bean有很多字段。 其中一些不是必需的。
  • 源bean非常重,并且包含許多嵌套bean。
  • 源bean具有其他系統可能不需要的不同類型的字段。

以上可能是某些其他特定原因,請考慮一種情況,您要進行REST調用或Web服務調用以獲取某人的最少帳戶詳細信息。 但是源系統中有一個名為“ AccountBean”的bean,其中包含許多敏感信息,例如個人的網上銀行密碼,個人資料密碼,pan no或社會保險號,總余額等。您想要開發一個僅公開帳戶地址的應用程序銀行的詳細信息,名稱和家庭分行。 這是必需的情況,您希望擁有自定義的Bean,該Bean應根據帳號暴露給外部。 在這種情況下,您必須將原始bean復制到您自定義的bean中。 要實現此功能,您可以通過以下方式來實現。

  • 編寫代碼以手動將源Bean的內容復制到目標Bean。
  • 使用java Reflection或Introspection實用程序將其從源復制到目標Bean。
  • 使用可自動進行復制的可用框架。

在這種情況下,我們將學習一個框架,該框架可幫助我們將源bean的內容復制到目標bean。 稱為“推土機”的框架非常流行,可以靈活地在應用程序中使用和集成。 您可以在各種互聯網站點上找到有關推土機的更多文檔。 在這篇文章中,我將為您提供Dozer的非常基礎和實際的用法。

在以下情況下,讓我們快速學習推土機的用法。

  • 將源Plain / Flat bean復制到目標Plain / Flat bean
  • 復制收藏
  • 雙向bean復制
  • 將扁豆復制到嵌套豆,反之亦然
  • 通過自定義轉換復制bean。

將源Plain / Flat bean復制到目標Plain / Flat bean

這是最簡單的情況,當我們有一個源POJO并想復制到目標POJO時。 讓我們考慮以下Java代碼。

源POJO的結構如下。

package com.ddlab.rnd.type1.srcpkg;/*** The Class Person is used as a source bean for Person which contains Address* object.* * @author <a href="mailto:debadatta.mishra@gmail.com">Debadatta Mishra</a>* @since 2013*/ public class Person {/** The name. */private String name;/** The age. */private int age;/** The adrs. */private Address adrs;// All getter and setter method below}

目標POJO的結構如下。

package com.ddlab.rnd.type1.destnpkg;/*** The Class Person1 is used as destination bean for Person1 which contains* Addrss1 object* * @authorDebadatta Mishra* @since 2013*/ public class Person1 {/** The name1. */private String name1;/** The age1. */private int age1;/** The adrs1. */private Address1 adrs1;//All getter setter method below}

讓我們看一下名為“ dozerMapping.xml”的推土機映射文件。

<?xml version="1.0" encoding="UTF-8"?> <mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd"><mapping map-id="a"><class-a>com.ddlab.rnd.type1.srcpkg.Person</class-a><class-b>com.ddlab.rnd.type1.destnpkg.Person1</class-b><field><a>name</a><b>name1</b></field><field><a>age</a><b>age1</b></field><field><a>adrs.doorNo</a><b>adrs1.doorNo1</b></field><field><a>adrs.stName</a><b>adrs1.stName1</b></field></mapping> </mappings>

上面的xml配置文件看起來非常直觀,因為<class-a>是指源bean,而<class-b>是指目標bean。 另一個字段<a>引用源Bean的屬性,而<b>引用目標Bean的屬性。

讓我們看一下完成bean映射的最終代碼。

List<String> list = new ArrayList<String>(); // Add the mapping configuration list.add("dozerMapping.xml"); // Add to DozerMapper Mapper mapper = new DozerBeanMapper(list); mapper.map(p, p1, "a");

現在完成了,它看起來非常簡單,并提供了許多強大的功能。 您已經記住了使用“ Dozer”框架進行bean復制的以下幾件事。

  • 源豆
  • 目標bean
  • 推土機映射文件配置
  • 映射配置應包含帶有正確包名稱的源POJO類
  • 映射配置應包含具有正確包名稱的目標POJO類
  • 映射配置應具有您在java類中定義的正確的確切屬性名稱

映射配置具有以下優點。

  • 您可以在需要時更改屬性名稱,并且不需要構建應用程序。
  • 您可以根據需要在Java類中添加該屬性。
  • 您可以具有一個或多個屬性文件來滿足特定要求。
  • 您可以根據需要編輯和刪除映射。
  • 您也可以在Spring應用程序中配置映射,即spring配置文件。

復制收藏

在某些情況下,您要將源類型的列表復制到目標類型的列表。 該列表可能包含不同類型的對象。 讓我們在下面看到一個典型的Java代碼。

package com.ddlab.dozer.type2.srcpkg; import java.util.List;/*** The Class AddressList is used as a source List object which contains object* of type Address.* * @author <a href="mailto:debadatta.mishra@gmail.com">Debadatta Mishra</a>* @since 2013*/ public class AddressList {/** The adrs list. */private List<Address> adrsList;/*** Gets the adrs list.* * @return the adrs list*/public List<Address> getAdrsList() {return adrsList;}/*** Sets the adrs list.* * @param adrsList* the new adrs list*/public void setAdrsList(List<Address> adrsList) {this.adrsList = adrsList;}}

在上述情況下,該列表包含“地址”類型對象的列表。 讓我們學習如何實現。

首先,在地址對象從源到目標之間創建一個映射,然后在源列表到目標列表之間創建一個映射。 讓我們看一下映射配置文件。

<?xml version="1.0" encoding="UTF-8"?> <mappings xmlns="http://dozer.sourceforge.net"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd"><mapping map-id="k"><class-a>com.ddlab.dozer.type2.srcpkg.Address</class-a><class-b>com.ddlab.dozer.type2.destnpkg.AddressBean</class-b><field><a>name</a><b>name</b></field><field ><a>id</a><b>id</b></field></mapping><mapping map-id="q1" type="one-way" relationship-type="non-cumulative"><class-a>com.ddlab.dozer.type2.srcpkg.AddressList</class-a><class-b>com.ddlab.dozer.type2.destnpkg.AddressBeanList</class-b><field map-id="k"><a>adrsList</a><b>adrsList</b></field></mapping></mappings>

要復制列表對象,可以使用第一種情況下的相同代碼。

雙向bean復制

在這種情況下,您需要一個在兩個方向都進行bean復制的映射。 讓我們考慮一下一種情況,您要將內部Java Bean轉換為自定義Bean以公開為Web服務,最后在自定義Bean中接收數據并將其轉換為內部Bean。 不建議編寫另一個映射。 “推土機”在xml映射配置中提供屬性,以根據需求在兩個方向上進行復制。 我提供了推土機配置中需要提及的屬性。

<mapping map-id="k" type="bi-directional"> <!-- Other field mapping --> </mapping>

上面的屬性類型( type="bi-directional" )提供了type="bi-directional"復制對象的靈活性。

將扁豆復制到嵌套豆,反之亦然

根據項目需求,您可能有一個復雜的bean,其中包含嵌套的其他java bean。 您可能必須將復雜的bean復制到簡單類型,反之亦然。 讓我們看看映射配置。

<?xml version="1.0" encoding="UTF-8"?> <mappings xmlns="http://dozer.sourceforge.net"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd"><mapping map-id="a"><class-a>com.ddlab.dozer.type4.srcpkg.MyPerson</class-a><class-b>com.ddlab.dozer.type4.destnpkg.Person1</class-b><!-- Other field info --> <field><a>doorNo</a><b>adrs1.doorNo1</b></field><field><a>stName</a><b>adrs1.stName1</b></field><field><a>cname</a><b>adrs1.country.name</b></field><field><a>ccode</a><b>adrs1.country.code</b></field><field><a>fd</a><b>adrs1.country.bd</b></field></mapping></mappings>

在上述情況下,將線標記為紅色。 要獲得動手示例,請參考以下映射配置文件。

  • flat2NestedBeanMapping.xml
  • nestedBeanMapping2Flat.xml

請參考以下軟件包。

  • com.ddlab.dozer.type4.destnpkg
  • com.ddlab.dozer.type4.srcpkg

您可以從以下鏈接下載完整的eclipse項目: https : //www.dropbox.com/s/j6ep7wq7lalfe2k/dozerbeancopy.zip

通過自定義轉換復制bean。

這是在發育期間發生的非常典型且復雜的狀況。 想象一下,您有一個Java Bean,其中包含特定字段,例如JodaTime api中的日期,UUID類型的對象,BigInteger類型的字段等,并且您有一個具有所有原始類型字段的Java Bean。 在這種情況下,您必須使用自定義轉換器并注入“ Dozer”映射配置文件,以便“ Dozer”將自動復制具有適當字段類型的java bean。

讓我們看看映射文件的結構。

<?xml version="1.0" encoding="UTF-8"?> <mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd"><configuration><custom-converters><converter type="com.ddlab.dozer.type5.converters.Date2JodaDateConverter"><class-a>org.joda.time.LocalDate</class-a><class-b>java.util.Date</class-b></converter></custom-converters></configuration><mapping map-id="k" type="bi-directional"><class-a>com.ddlab.dozer.type5.srcpkg.SrcBean</class-a><class-b>com.ddlab.dozer.type5.destnpkg.DestnBean</class-b><!-- For UUID --><field copy-by-reference="true"><a>idKey</a><b>uid</b></field><!-- For java.util.Date to org.joda.time.LocalDate --><field><a>utilDate</a><b>jodaDate</b></field><!-- For double to java.math.BigDecimal --><field><a>amount</a><b>bigDecimal</b></field></mapping></mappings>

推土機提供了一個名為“ org.dozer.CustomConverter ”的接口,該接口可根據我們的要求進行自定義轉換。 我在下面提供了一個小代碼段。

package com.ddlab.dozer.type5.converters;import org.dozer.CustomConverter; import org.dozer.MappingException; import org.joda.time.LocalDate;/*** The Class Date2JodaDateConverter is used as a Dozer custom converter for* converting java.util.Date to Jodatime LocalDate.* * @author <a href="mailto:debadatta.mishra@gmail.com">Debadatta Mishra</a>* @since 2013*/ public class Date2JodaDateConverter implements CustomConverter {/** (non-Javadoc)* * @see org.dozer.CustomConverter#convert(java.lang.Object,* java.lang.Object, java.lang.Class, java.lang.Class)*/@Overridepublic Object convert(Object existingDestinationFieldValue,Object sourceFieldValue,@SuppressWarnings("rawtypes") Class destinationClass,@SuppressWarnings("rawtypes") Class sourceClass) {if (sourceFieldValue == null) {return null;}if (sourceFieldValue instanceof java.util.Date) {java.util.Date utilDate = (java.util.Date) sourceFieldValue;LocalDate localDate = new LocalDate(utilDate.getTime());return localDate;}throw new MappingException("Misconfigured/unsupported mapping");}}

要了解更多信息,請參考以下軟件包。

  • com.ddlab.dozer.type5.converters
  • com.ddlab.dozer.type5.destnpkg
  • com.ddlab.dozer.type5.srcpkg

怎么做

要使用“ Dozer”框架,您必須在類路徑中使用以下jar文件。

  • commons-beanutils-1.7.jar
  • commons-lang-2.4.jar
  • commons-logging-1.1.1.jar
  • commons-logging-api-1.1.1.jar
  • 推土機5.3.2.jar
  • joda-time-2.2.jar
  • log4j-1.2.16.jar
  • log4j-over-slf4j-1.6.1.jar
  • slf4j-api-1.6.1.jar
  • slf4j-jdk14-1.6.1.jar
  • slf4j-simple-1.6.1.jar

您必須從以下鏈接下載“ Dozer”框架: http : //dozer.sourceforge.net/ 。 推土機還提供eclipse插件以簡化映射工作。

相關軟件包和配置文件

普通豆到普通豆

  • com.ddlab.rnd.type1.destnpkg(來自src)
  • com.ddlab.rnd.type1.srcpkg(來自src)
  • com.ddlab.rnd.type1(來自測試)
  • dozerMapping.xml(映射配置)

收藏集復制

  • com.ddlab.dozer.type2.destnpkg(來自src)
  • com.ddlab.dozer.type2.srcpkg(來自src)
  • com.ddlab.dozer.type2(來自測試)
  • list2ListMapping.xml(映射配置)

雙向Bean復制

  • com.ddlab.dozer.type3(來自測試)
  • dozerBidirectionalMapping1.xml(映射配置)

扁到嵌套豆/嵌套到扁豆

  • com.ddlab.dozer.type4.destnpkg(來自src)
  • com.ddlab.dozer.type4.srcpkg(來自src)
  • com.ddlab.dozer.type4(來自測試)
  • flat2NestedBeanMapping.xml(映射配置)
  • nestedBeanMapping2Flat.xml(映射配置)

定制轉換器

  • com.ddlab.dozer.type5.converters(來自src)
  • com.ddlab.dozer.type5.destnpkg(來自src)
  • com.ddlab.dozer.type5.srcpkg(來自src)
  • com.ddlab.dozer.type5(來自測試)
  • dozercustomconvertermapping.xml

下載

您可以從以下Dropbox網站下載完整的Eclipse項目: https : //www.dropbox.com/s/j6ep7wq7lalfe2k/dozerbeancopy.zip 。 您可以通過導入項目輕松地配置Eclipse IDE。

結論

希望您喜歡我關于在Java中使用Dozer框架進行bean復制的小型文章。 下載完整的項目并查看源代碼,以了解概念及其用法。 根據復雜性和設計,您可以決定是否使用此概念。 對于任何類型的問題和錯誤,您可以通過debadatta.mishra@gmail.com與我聯系。

資源和參考

還有其他框架可以或多或少地提供bean操作。 我發現“推土機”框架適用于各種領域。 還有一種類似的框架稱為“ Nomin”,該框架通過在屬性文件中提供配置來提供類似于“ Dozer”的映射。 我在下面提供了各種鏈接供您參考。

  • http://dozer.sourceforge.net/documentation/gettingstarted.html
  • http://nomin.sourceforge.net/
  • http://modelmapper.org/
  • http://code.google.com/p/orika/
  • http://morph.sourceforge.net/
  • https://code.google.com/p/omapper/

翻譯自: https://www.javacodegeeks.com/2013/09/bean-manipulation-using-dozer-framework.html

dozer bean

總結

以上是生活随笔為你收集整理的dozer bean_使用Dozer框架进行Bean操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。