BaseTransfer工具类封装

问题引入:

写代码过程中, 往往因为联表查询而多出字段, 导致需要新建Vo类来接收数据库返回的值. 这样就存在Vo和普通Entity实体类的转换.

下面用一个实例来说明: 

步骤一: 封装工具类BaseTransfer

package com.myJava.transfer.base;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

/**
 * entity和vo之间的转换
 */
@Slf4j
public class BaseTransfer<T, VO> {

    private Class<T> clazzT;
    private Class<VO> clazzVO;

    public BaseTransfer() {
        Type types = this.getClass().getGenericSuperclass();
        Type[] genericType = ((ParameterizedType) types).getActualTypeArguments();
        clazzT = (Class<T>) genericType[0];
        clazzVO = (Class<VO>) genericType[1];
    }

    /**
     * 转VO
     */
    public VO toVO(T t) {
        try {
            VO vo = clazzVO.newInstance();
            //spring内置的工具类 转换entity 和vo  BeanUtils.copyProperties(t, vo);
            BeanUtils.copyProperties(t, vo);
            return vo;
        } catch (Exception e) {
            log.error("toVO转换错误", t);
        }
        return null;

    }

    /**
     * 转T
     */

    public T toEntity(VO vo) {
        try {
            T t = clazzT.newInstance();
            BeanUtils.copyProperties(vo, t);
            return t;
        } catch (Exception e) {
            log.error("toEntity转换错误", vo);
        }
        return null;
    }

    /**
     * 转VO
     */
    public List<VO> toVO(List<T> list) {
        List<VO> list1 = new ArrayList<>();
        list.forEach(t -> list1.add(toVO(t)));
        return list1;
    }

    /**
     * 转Entity
     */
    public List<T> toEntity(List<VO> list) {
        List<T> list1 = new ArrayList<>();
        list.forEach(vo -> list1.add(toEntity(vo)));
        return list1;
    }
}

步骤二: 具体的业务AdminTransfer, 继承BaseTransfer

Admin和AdminVo的区别在于, AdminVo多了成员变量sex和deptName, sex由Admin中gender判断得出, deptName需要从dept表中查询得知. 下面只增加了一个方法演示. 可以根据实际需要, 补充更多方法.

package com.myJava.transfer;
import com.myJava.domin.entity.Admin;
import com.myJava.domin.entity.Dept;
import com.myJava.domin.vo.AdminVo;
import com.myJava.mapper.DeptMapper;
import com.myJava.transfer.base.BaseTransfer;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import java.util.List;

@Component
@RequiredArgsConstructor
public class AdminTransfer extends BaseTransfer<Admin, AdminVo> {

    private final DeptMapper deptMapper;

    public List<AdminVo> setSexAndDept(List<Admin> list) {
        //先转换成vo对象
        List<AdminVo> adminVoList = super.toVO(list);
        //遍历vo对象
        for (int i = 0; i < adminVoList.size(); i++) {
            //拿到entity对象
            Admin admin = list.get(i);
            //非空判断
            if (!StringUtils.isEmpty(admin)) {
                //对adminvo中的性别进行赋值
                if (admin.getGender() == 0) {
                    adminVoList.get(i).setSex("男");
                } else if (admin.getGender() == 1) {
                    adminVoList.get(i).setSex("女");
                } else {
                    adminVoList.get(i).setSex("未知");
                }
            }
            //拿到admin对象中的dept中的id
            Dept dept = deptMapper.selectById(admin.getDeptId());
            AdminVo adminVo = adminVoList.get(i);
            //判断是否非空 并给部门名称进行赋值
            adminVo.setDeptName(dept == null ? "" : dept.getDeptName());

        }
        return adminVoList;
    }
}

步骤三: 测试

这样就得到设置好性别和部门名称的AdminVo集合了.

@Test
    void testtt(){
        List<Admin> adminList = adminService.selectList();
        List<AdminVo> adminVoList = adminTransfer.setSexAndDept(adminList);
        adminVoList.forEach(adminVo -> {
            System.out.println(adminVo.toString());
        });
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值