欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
dozer與BeanUtils

呵呵,在《develope J2EE without EJB》中,DTO被狠很地批判了一把,rod說(shuō)這完全是反模式??蓪?shí)際項目當中,我們還是不得不在使用。VO,PO,一牽扯到概念總是多么復雜。。。把一個(gè)PO從頭傳到尾??從頁(yè)面到數據庫,一捅到底?NO,NO,萬(wàn)一你要顯示給用戶(hù)的是幾個(gè)PO的結合怎么辦?萬(wàn)一我們只是需要某幾個(gè)屬性組合在一起顯示怎么辦?一捅到底的策略是多么丑陋,而且你完全把你的數據庫設計模型暴露給用戶(hù)。所以我們需要一些map工具來(lái)轉換,在這方面,過(guò)去我只知道有個(gè) BeanUtils,不夠靈活,而今天,接觸了下dozer,啊,跟spring一樣的理念!靈活多變,你想怎么映射,想怎么換都可以??纯此С值霓D換類(lèi)型:

Primitive to Primitive Wrapper
Primitive to Custom Wrapper
Primitive Wrapper to Primitive Wrapper

Primitive to Primitive
Complex Type to Complex Type
String to Primitive
String to Primitive Wrapper
String to Complex Type if the Complex Type contains a String constructor
Each of these can be mapped to one another: java.util.Date, java.sql.Date, java.sql.Time,
java.sql.Timestamp, java.util.Calendar, java.util.GregorianCalendar
String to any of the supported Date/Calendar Objects if an explicit date format mapping attribute is
specified.
Objects containing a toString() method that produces a long representing time in (ms) to any
supported Date/Calendar object.

幾乎我們能想到的,它都提供了方法來(lái)做到。而且dozer可以很容易地跟spring集成。下面舉個(gè)簡(jiǎn)單例子:

定義一個(gè)Book對象:

package com.denny_blue.dozerdemo;
public class Book {
 private String name;
 private String author;
 
 
 public Book(){
  
 } 
 public void setAuthor(String author) {
  this.author = author;
 }

 public String getAuthor() {
  return (this.author);
 }
 public void setName(String name){
  this.name=name;
 } 
 public String getName(){
  return this.name;
 }
}
簡(jiǎn)單的,我們要實(shí)例化一個(gè)對象,然后clone此對象,注意,是clone!

package com.denny_blue.dozerdemo;
import net.sf.dozer.util.mapping.DozerBeanMapper;
import java.util.List;
import java.util.ArrayList;


public class MyFirstDozerDemo {
 public static void main(String args[]){
  Book book1=new Book();
  book1.setAuthor("dennis");
  book1.setName("dozer demo");
  DozerBeanMapper mapper=new DozerBeanMapper();
  Book book2=new Book();
  mapper.map(book1,book2);
  book2=(Book)mapper.map(book1,com.denny_blue.dozerdemo.Book.class);
  System.out.println("book2's name:"+book2.getName());
     }

OK,如此簡(jiǎn)單,我們把book1的屬性完全復制給了book2,兩者現在是完全獨立的對象??扇绻麅H僅是這樣,我們用BeanUtils不是也很容易辦到? book2=(Book)BeanUtils.cloneBean(book1);可如果我要把book1映射給一個(gè)完全不同的類(lèi)的對象怎么辦?而且他們的屬性名也不相同,怎么辦?比如,一個(gè)CookBook類(lèi):

package com.denny_blue.dozerdemo;
public class CookBook {
 private String bookName;
 private String author;


 public CookBook(){}
 public String getBookName() {
  return (this.bookName);
 }

 public void setBookName(String bookName) {
  this.bookName = bookName;
 }

 public String getAuthor() {
  return (this.author);
 }

 public void setAuthor(String author) {
  this.author = author;
 }


}
它的bookName屬性與Book的name屬性名不一樣,我們該如何復制?dozer通過(guò)xml文件的配置來(lái)靈活地達到這個(gè)目的。我們配置一個(gè)dozerBeanMapping.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mappings PUBLIC "-//DOZER//DTD MAPPINGS//EN"
"<mappings>
<configuration>
<stop-on-errors>false</stop-on-errors>
<date-format>MM/dd/yyyy HH:mm</date-format>
<wildcard>true</wildcard>
</configuration>
<mapping>
<class-a>com.denny_blue.dozerdemo.Book</class-a>
<class-b>com.denny_blue.dozerdemo.CookBook</class-b>
<field>
<a>name</a>
<b>bookName</b>
</field>
<field>
<a>author</a>
<b>author</b>
</field>
</mapping>
</mappings>

如上所示,<class-a>指定所要復制的源對象,<class-b>復制的目標對象,<a>源對象的屬性名, <b>目標對象的屬性名。wildcard默認為true,在此時(shí)默認對所有屬性進(jìn)行map,如果為false,則只對在xml文件中配置的屬性進(jìn)行map。此時(shí)的demo 看起來(lái)像這樣:

package com.denny_blue.dozerdemo;
import net.sf.dozer.util.mapping.DozerBeanMapper;
import java.util.List;
import java.util.ArrayList;


public class MyFirstDozerDemo {
 public static void main(String args[]){
  Book book1=new Book();
  book1.setAuthor("dennis");
  book1.setName("dozer demo");
  DozerBeanMapper mapper=new DozerBeanMapper();
  book2=(Book)mapper.map(book1,com.denny_blue.dozerdemo.Book.class);
  CookBook cookBook=new CookBook();
  List myMappingFiles = new ArrayList();
  myMappingFiles.add("dozerBeanMapping.xml");
  mapper.setMappingFiles(myMappingFiles);
  cookBook=(CookBook)mapper.map(book1,CookBook.class);
  System.out.println("cookBook's name:"+   cookBook.getBookName()+"     cookBook's author:"+
                      cookBook.getAuthor());
 }
}

通過(guò)mapper.setMappingFiles()設置映射文件,可以添加多個(gè)配置文件,也可以把所有的映射寫(xiě)在一個(gè)配置文件里面。  更多復雜例子請見(jiàn)它自帶的doc。

打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
DO、DTO和VO分層設計的好處
beanUtils的用法
SSH實(shí)現的增刪改查實(shí)例
Java finalize() 和System.gc()
Paleo Recipe Book - Brand New Paleo Cookbook
用 Spring 的 BeanUtils 前,建議你先了解這幾個(gè)坑!
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久