MapStruct简单使用

DBC 1.4K 0
温馨提示

简单使用一下MapStruct,不会涉及复杂的操作,后面用到会再更新此文章!

添加pom文件

		<dependency>
			<groupId>org.mapstruct</groupId>
			<artifactId>mapstruct</artifactId>
			<version>1.3.1.Final</version>
		</dependency>
		<dependency>
			<groupId>org.mapstruct</groupId>
			<artifactId>mapstruct-processor</artifactId>
			<version>1.3.1.Final</version>
		</dependency>

需要新建一个mapper

UserMapper

package com.example.test05.demo.mapper;

import com.example.test05.demo.model.TbUserDO;
import com.example.test05.demo.model.UserDo;
import com.example.test05.demo.model.UserVO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.springframework.core.convert.converter.Converter;

import java.util.List;

/**
 * @author DBC
 * @date 2022/5/7 16:49
 */

@Mapper(componentModel = "spring")
public interface UserMapper extends Converter<TbUserDO, UserVO> {

    @Mapping(target = "testId", source = "id")
    UserVO convert(TbUserDO userDO);

    /**
     * 数组转换
     * @param tbUserDOList
     * @return
     */
    List<UserVO> toVos(List<TbUserDO> tbUserDOList);


    /**
     * 多合一转换
     * @param tbUserDO
     * @param userDo
     * @return
     */
    @Mappings({
            @Mapping(target = "name", source = "userDo.name"),
            @Mapping(target = "testId", source = "tbUserDO.id")
    })
    UserVO convert(TbUserDO tbUserDO, UserDo userDo);



}

开始测试

1.简单转换

	@Test
	public void Test1() {
		TbUserDO userDO = new TbUserDO();
		userDO.setId(1);
		userDO.setAge("20");
		userDO.setName("dbc");

		UserVO userVO = userMapper.convert(userDO);
		System.out.println(userVO);
	}

控制台输出

UserVO(testId=1, name=dbc, age=20)

2.数组转换

@Test
	public void Test2() {
		TbUserDO userDO = new TbUserDO();
		userDO.setId(1);
		userDO.setAge("20");
		userDO.setName("dbc");

		ArrayList list = new ArrayList();
		ArrayList listVO = new ArrayList();
		for (int i=0;i<10;i++){
			list.add(userDO);
		}

		listVO = (ArrayList) userMapper.toVos(list);
		System.out.println(listVO);
	}

.

控制台输出

[UserVO(testId=1, name=dbc, age=20), UserVO(testId=1, name=dbc, age=20), UserVO(testId=1, name=dbc, age=20), UserVO(testId=1, name=dbc, age=20), UserVO(testId=1, name=dbc, age=20), UserVO(testId=1, name=dbc, age=20), UserVO(testId=1, name=dbc, age=20), UserVO(testId=1, name=dbc, age=20), UserVO(testId=1, name=dbc, age=20), UserVO(testId=1, name=dbc, age=20)]

3.多合一转换

	@Test
	public void Test3() {
		TbUserDO tbUserDO = new TbUserDO();
		tbUserDO.setId(1);
		tbUserDO.setAge("20");
		tbUserDO.setName("dbc");

		UserDo userDo = new UserDo();
		userDo.setName("大白菜");

		UserVO userVO = userMapper.convert(tbUserDO,userDo);
		System.out.println(userVO);
	}

控制台输出

UserVO(testId=1, name=大白菜, age=20)

完整代码

点击查看完整内容

4.忽略对应字段

    @Mappings({
            @Mapping(target = "createUser",ignore=true),
            @Mapping(target = "createTime",ignore=true),
            @Mapping(target = "lastUser",ignore=true),
            @Mapping(target = "lastTime",ignore=true),
    })
    ADO BDOToADO(BDO do);

5.避免返回对象创建

加入@MappingTarget即可

    QuestionnaireVO relocationMonitorToVO(QuestionnaireRelocationMonitorDO questionnaireRelocationMonitorDO, @MappingTarget QuestionnaireVO questionnaireVO);

6.null值不要赋值,忽略null值

@Mapper(componentModel = "spring", nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE,
        nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
温馨提示

简单的来说,如果是业务比较简单的对象转换,那么使用这种方式会增加系统的复杂度,但是如果业务复杂起来的话,那么这种方式的代码会比较优雅,而且性能较高,因为它底层并不是使用的反射原理,有一种模拟手工的get/set操作的感觉,性能非常高!具体可以去百度相关[aru_42]

发表评论 取消回复
表情 图片 链接 代码

分享