最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解析Orika的MapperFacade 屬性賦值的使用問(wèn)題

 更新時(shí)間:2021年12月23日 10:04:43   作者:夢(mèng)夢(mèng)~~  
在我們實(shí)際開發(fā)中,常常會(huì)有對(duì)象與對(duì)象之間的轉(zhuǎn)化,或者把一個(gè)對(duì)象的數(shù)據(jù)轉(zhuǎn)化到另一個(gè)數(shù)據(jù)之中,如果我們手動(dòng)的一個(gè)一個(gè)的set就會(huì)比較麻煩,代碼段看起來(lái)也會(huì)比較長(zhǎng)。而Orika的MapperFacade就是解決這個(gè)問(wèn)題的,實(shí)現(xiàn)對(duì)象屬性的復(fù)制

MapperFacade 拷貝對(duì)象、拷貝集合的使用

介紹MapperFactory、MapperFacade

????????在我們實(shí)際開發(fā)中,常常會(huì)有對(duì)象與對(duì)象之間的轉(zhuǎn)化,或者把一個(gè)對(duì)象的數(shù)據(jù)轉(zhuǎn)化到另一個(gè)數(shù)據(jù)之中,如果我們手動(dòng)的一個(gè)一個(gè)的set就會(huì)比較麻煩,代碼段看起來(lái)也會(huì)比較長(zhǎng)。而Orika的MapperFacade就是解決這個(gè)問(wèn)題的,實(shí)現(xiàn)對(duì)象屬性的復(fù)制。
Orika的MapperFacade的官網(wǎng):http://orika-mapper.github.io/orika-docs/intro.html

????????這里有兩個(gè)核心的類,MapperFactory 、MapperFacade。

????????MapperFactory:相當(dāng)于一個(gè)通道,無(wú)它不行,可以用來(lái)注冊(cè)字段的映射、轉(zhuǎn)換器、自定義映射器、具體類型等等。

????????上面的圖片是從官網(wǎng)上截下來(lái)的,大致就是說(shuō),創(chuàng)建一個(gè)MapperFactory實(shí)例,它的作用可以用來(lái)注冊(cè)字段的映射、轉(zhuǎn)換器、自定義映射器、具體類型等等。MapperFactory的classMap方法是用來(lái)映射名稱不同的屬性,比如現(xiàn)在person類有dateTime屬性,而student類沒(méi)有dateTime屬性,但是有birth屬性,這兩個(gè)屬性雖然名字不同,但是表示的意思是一樣的,表示出生年月,此時(shí)就需要使用classMap來(lái)匹配不同屬性的映射。
而field()、byDefault()、register()的作用分別如下:

MapperFacade:它是實(shí)現(xiàn)映射過(guò)程的真正部分。有兩種映射模式:

????????模式一:map(objectA, B.class)方法:將會(huì)生成一個(gè)新的實(shí)例B,然后把實(shí)例A中的屬性賦值給實(shí)例B。所以方法是有返回值的,返回的是已經(jīng)賦值完成的實(shí)例B。

????????模式二:map(objectA, objectB)方法:A、B都是實(shí)例,不是null,然后把實(shí)例A的屬性賦值到實(shí)例B中。所以是沒(méi)有返回值的。

????????另外:MapperFacade的作用和Spring中的BeanUtils是一樣的,都是屬性賦值的,只不過(guò)BeanUtils屬性復(fù)制的時(shí)候,如果兩個(gè)對(duì)象的屬性不一樣的話,需要手動(dòng)的去設(shè)置,比較麻煩。
MapperFacade的效率相對(duì)來(lái)說(shuō)高一些:因?yàn)镺rika的設(shè)計(jì)思路是預(yù)先通過(guò)javaassist把JavaBean之間的映射關(guān)系一次性生成目標(biāo)拷貝方法代碼。 這樣就可以避免在Bean 映射環(huán)節(jié)一次次的讀取映射規(guī)則。 從而實(shí)現(xiàn)效率上的提高。

demo測(cè)試

????????下面就寫一個(gè)demo測(cè)試一下。
第一步:maven工程的話,先導(dǎo)入依賴。不是maven的話,可以去官網(wǎng)下載相關(guān)文件。

<dependency>
            <groupId>ma.glasnost.orika</groupId>
            <artifactId>orika-core</artifactId>
            <version>1.4.2</version><!-- or latest version -->
  	 	</dependency>

? ? ? ? 第二步:寫一個(gè)配置類,生成MapperFactory實(shí)例。如果不寫配置的話,就直接在代碼中生成即可。

package com.lmh.config;

import ma.glasnost.orika.MapperFactory;
import ma.glasnost.orika.impl.DefaultMapperFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author lmh
 * @Description:
 * @date 2021/12/21 14:01
 */
@Configuration
public class MapperFactoryAutowire {

    @Bean
    public MapperFactory getMapperFactory(){
        return new DefaultMapperFactory.Builder().build();
    }
}

? ? ? ? 第三步:寫兩個(gè)實(shí)體類,屬性設(shè)置的有不一樣的。

package com.lmh.po;
import java.util.Date;
/**
 * @author lmh
 * @Description:
 * @date 2021/12/21 14:07
 */
public class Person {
    public Person() {
    }
    public Person(String name, Integer age, Date dateTime) {
        this.name = name;
        this.age = age;
        this.dateTime = dateTime;
    }
    private String name;
    private Integer age;
    private Date dateTime;
    public String getName() {
        return name;
    }
    public Person setName(String name) {
        this.name = name;
        return this;
    }
    public Integer getAge() {
        return age;
    }
    public Person setAge(Integer age) {
        this.age = age;
        return this;
    }
    public Date getDateTime() {
        return dateTime;
    }
    public Person setDateTime(Date dateTime) {
        this.dateTime = dateTime;
        return this;
    }
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", dateTime=" + dateTime +
                '}';
    }
}
package com.lmh.po;
import java.util.Date;
/**
 * @author lmh
 * @Description:
 * @date 2021/12/21 14:08
 */
public class Student {
    private String name;
    private String grade;
    private Integer age;
    private Date birth;
    public Date getBirth() {
        return birth;
    }
    public Student setBirth(Date birth) {
        this.birth = birth;
        return this;
    }
    public String getName() {
        return name;
    }
    public Student setName(String name) {
        this.name = name;
        return this;
    }
    public String getGrade() {
        return grade;
    }
    public Student setGrade(String grade) {
        this.grade = grade;
        return this;
    }
    public Integer getAge() {
        return age;
    }
    public Student setAge(Integer age) {
        this.age = age;
        return this;
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", grade='" + grade + '\'' +
                ", age=" + age +
                ", birth=" + birth +
                '}';
    }
}

拷貝對(duì)象

????????上面是一些前期準(zhǔn)備,在controller中寫一個(gè)測(cè)試方法測(cè)試對(duì)對(duì)象屬性拷貝。

/**
 * @author lmh
 * @Description:
 * @date 2021/12/21 14:12
 */
@RestController
public class BeanCopyController {
    @Autowired
    public MapperFactory mapperFactory;
    /**
     * @Decription 測(cè)試MapperFactory是否生成
     * @Param   null
     * @Return  void
     * @Author  lmh
     * @Date    2021/12/21 14:14
     */
    @RequestMapping("/createMapperFactory")
    public String createMapperFactoryTest(){
        System.out.println("注入的mapperFactory是:"+mapperFactory);
        return "注入的mapperFactory是:"+mapperFactory;
    }
    /**
     * @Decription 將一個(gè)已經(jīng)存在的類的屬性映射到另外一個(gè)類上(可以不存在),直接返回該類,注意
     * 必須要有默認(rèn)的構(gòu)造方法,不然會(huì)報(bào)錯(cuò)
     * @Param   null
     * @Return  com.lmh.po.Student
     * @Author  lmh
     * @Date    2021/12/21 14:27
     */
    @RequestMapping("/beanCopyToBean")
    public Student beanCopyToBean(){
        Student student = null;
        try {
            Person person = new Person("lmh",21,new SimpleDateFormat("yyyy-MM-dd").parse("2000-04-29"));
            //MapperFactory 映射兩個(gè)對(duì)象之間的屬性、注冊(cè)轉(zhuǎn)換器、自定義映射器等等
            mapperFactory.classMap(Person.class,Student.class)
                    .field("dateTime","birth")  //不同屬性名的映射
                    .byDefault()    //剩余字段(相同屬性名)的映射
                    .register();    //向MapperFactory注冊(cè)映射關(guān)系
            //如果所有的字段都一樣,就不用寫mapperFactory.classMap()方法;
            student = mapperFactory.getMapperFacade().map(person, Student.class);
            System.out.println("屬性賦值之后student的屬性:"+student);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return student;
    }

? ? ? ? 測(cè)試結(jié)果:

拷貝集合

????????代碼如下:

/**
     * @Decription  將一個(gè)list映射到另一個(gè)list中
     * @Param   null
     * @Return  java.util.List<com.lmh.po.Student>
     * @Author  lmh
     * @Date    2021/12/21 15:13
     */
    @RequestMapping("/beanCopyToList")
    public List<Student> beanCopyToList(){
        List<Person> personList = this.getPersonList();
        //手動(dòng)配置不一樣屬性轉(zhuǎn)換
        mapperFactory.classMap(Person.class,Student.class)
                .field("dateTime","birth")  //不一樣字段的映射
                .byDefault()    //剩余字段的映射
                .register();	//想MapperFacade注冊(cè)映射關(guān)系
        //轉(zhuǎn)換list
        List<Student> studentList = mapperFactory.getMapperFacade().mapAsList(personList, Student.class);
        studentList.forEach(student -> {
            System.out.println(student);
        });
        return studentList;
    }
    /**
     * @Decription 生成personList
     * @Param   null
     * @Return  java.util.List<com.lmh.po.Person>
     * @Author  lmh
     * @Date    2021/12/21 15:20
     */
    public List<Person> getPersonList(){
        List<Person> list = new ArrayList<>(5);
        Person person1 = new Person("lmh1", 20, new Date());
        Person person2 = new Person("lmh2", 22, new Date());
        Person person3 = new Person("lmh3", 30, new Date());
        Person person4 = new Person("lmh4", 14, new Date());
        Person person5 = new Person("lmh5", 15, new Date());
        list.add(person1);
        list.add(person2);
        list.add(person3);
        list.add(person4);
        list.add(person5);
        return list;
    }

? ? ? ? 測(cè)試結(jié)果:

????????注意:如果兩個(gè)類屬性都一樣,進(jìn)行屬性賦值的時(shí)候,就不需要進(jìn)行字段映射了,直接通過(guò)mapperFactory獲取mapperFacade對(duì)象即可。

到此這篇關(guān)于Orika的MapperFacade 屬性賦值的使用的文章就介紹到這了,更多相關(guān)MapperFacade 使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring boot actuator監(jiān)控超詳細(xì)教程

    spring boot actuator監(jiān)控超詳細(xì)教程

    Spring Boot Actuator就是一款可以幫助你監(jiān)控系統(tǒng)數(shù)據(jù)的框架,其可以監(jiān)控很多很多的系統(tǒng)數(shù)據(jù),接下來(lái)通過(guò)本文給大家介紹spring boot actuator監(jiān)控超詳細(xì)教程,感興趣的朋友一起看看吧
    2021-10-10
  • JSON反序列化Long變Integer或Double的問(wèn)題及解決

    JSON反序列化Long變Integer或Double的問(wèn)題及解決

    這篇文章主要介紹了JSON反序列化Long變Integer或Double的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Mybatis批量修改時(shí)出現(xiàn)報(bào)錯(cuò)問(wèn)題解決方案

    Mybatis批量修改時(shí)出現(xiàn)報(bào)錯(cuò)問(wèn)題解決方案

    這篇文章主要介紹了Mybatis批量修改時(shí)出現(xiàn)報(bào)錯(cuò)問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 使用Thrift實(shí)現(xiàn)跨語(yǔ)言RPC的調(diào)用

    使用Thrift實(shí)現(xiàn)跨語(yǔ)言RPC的調(diào)用

    Thrift最大的優(yōu)勢(shì)就是可以實(shí)現(xiàn)跨語(yǔ)言RPC調(diào)用,尤其在一些大廠,微服務(wù)各模塊之間使用不同的語(yǔ)言是很常見(jiàn)的,本文就將使用java作為服務(wù)端,用python作為客戶端,實(shí)現(xiàn)不同語(yǔ)言之間的RPC調(diào)用,需要的可以參考下
    2023-10-10
  • 全方位解析key值不確定的json數(shù)據(jù)

    全方位解析key值不確定的json數(shù)據(jù)

    這篇文章主要介紹了全方位解析key值不確定的json數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • 解決J2EE-session在瀏覽器關(guān)閉后失效問(wèn)題

    解決J2EE-session在瀏覽器關(guān)閉后失效問(wèn)題

    最近做項(xiàng)目使用的是Spring+SpringMVC+Mybatis框架,maven管理目錄的javaweb端系統(tǒng),對(duì)于session的一些問(wèn)題,在此小編給大家分享到腳本之家平臺(tái),需要的朋友參考下吧
    2018-01-01
  • Java中包裝類介紹與其注意事項(xiàng)

    Java中包裝類介紹與其注意事項(xiàng)

    Java語(yǔ)言是一個(gè)面向?qū)ο蟮恼Z(yǔ)言,但是Java中的基本數(shù)據(jù)類型卻是不面向?qū)ο蟮模@在實(shí)際使用時(shí)存在很多的不便,所以在設(shè)計(jì)類時(shí)為每個(gè)基本數(shù)據(jù)類型設(shè)計(jì)了一個(gè)對(duì)應(yīng)的類進(jìn)行代表,這樣八個(gè)和基本數(shù)據(jù)類型對(duì)應(yīng)的類統(tǒng)稱為包裝類,有些地方也翻譯為外覆類或數(shù)據(jù)類型類。
    2017-02-02
  • 如何使用Java生成具有安全哈希的QR碼

    如何使用Java生成具有安全哈希的QR碼

    這篇文章主要介紹了如何使用Java生成具有安全哈希的QR碼,這是關(guān)于如何在Java中使用salt生成QR代碼和安全散列字符串的分步教程。,需要的朋友可以參考下
    2019-06-06
  • Java初學(xué)者常問(wèn)的問(wèn)題(推薦)

    Java初學(xué)者常問(wèn)的問(wèn)題(推薦)

    本文介紹一些Java初學(xué)者常問(wèn)的問(wèn)題,很多朋友對(duì)可以用%除以一個(gè)小數(shù)嗎? a += b 和 a = a + b 的效果有區(qū)別嗎? 聲明一個(gè)數(shù)組為什么需要花費(fèi)大量時(shí)間? 為什么Java庫(kù)不用隨機(jī)pivot方式的快速排序?等等一系列問(wèn)題有疑惑,下面就通過(guò)本文給大家詳細(xì)介紹下
    2017-03-03
  • 淺析Java中的GC垃圾回收器的意義及與GC的交互

    淺析Java中的GC垃圾回收器的意義及與GC的交互

    這篇文章主要介紹了Java中的GC垃圾回收器的意義及與其的交互,GC是Java虛擬機(jī)JVM的一項(xiàng)重要特性,需要的朋友可以參考下
    2015-12-12

最新評(píng)論

克什克腾旗| 澎湖县| 长宁区| 余姚市| 大理市| 新营市| 阿拉善右旗| 蓝田县| 托克逊县| 吉林省| 朝阳市| 当阳市| 永丰县| 合肥市| 乌拉特中旗| 澄江县| 通山县| 洪泽县| 辛集市| 高陵县| 丰镇市| 五家渠市| 双江| 双柏县| 潜江市| 弥勒县| 舞钢市| 陵川县| 遂溪县| 壶关县| 甘南县| 英德市| 平乐县| 武功县| 孝义市| 江达县| 淮安市| 漠河县| 七台河市| 灵川县| 洪江市|