java 仿mybatis resultMap 属性赋值器(工具类)

  1. 测试部分代码

  2. 运行效果

  3. 实体类部分

  4. 关键部分代码

测试部分代码:

import com.LingDr.entity.Student;
import org.junit.Test;

import static com.LingDr.utils.SetPropertyInfo.setPropertyInfo;

/**
 * @Author: LI_Lingfei
 * @CreateTime: 2021-01-09 13:09
 */
public class TT {
    @Test
    public void test1() {
        System.out.println("这是第一个测试打印");
        Student student = (Student) setPropertyInfo(new Student(), "grade.gradeName", "这是班级名称");
        System.out.println(student);
        System.out.println("\n-----分割红线------\n");
    }

    @Test
    public void test2() {
        System.out.println("这是第二个测试打印");
        Student student = new Student();
        setPropertyInfo(student, "grade.school.schoolName", "这是学校名称");
        setPropertyInfo(student, "grade.gradeName", "这是班级名称");
        System.out.println(student);
    }
}

运行效果:
在这里插入图片描述
实体类部分

/**
 * 学生类
 * @Author: LI_Lingfei
 * @CreateTime: 2021-01-09 13:14
 */
public class Student {
    private String studentName;
    private Grade grade;
    /**
    * 其它get、set等等
    */
}

/**
 * 班级类
 * @Author: LI_Lingfei
 * @CreateTime: 2021-01-09 13:15
 */
public class Grade {
    private String gradeName;
    private School school;
	//get.set等
}

/**
 * 学校类
 * @Author: LI_Lingfei
 * @CreateTime: 2021-01-09 13:14
 */
public class School {
    private String schoolName;
    //get.set等
}

关键部分代码:

package com.lingDream.utils;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

import static com.lingDream.utils.ObjectUtils.newObject;
import static com.lingDream.utils.strUtil.StringUtils.get_set;

/**
 * @Author: LI_Lingfei
 * @CreateTime: 2021-01-08 20:11
 */
public class SetPropertyInfo {
    public static Object setPropertyInfo(Object object, String str, String val) {
        String[] split = str.split("[.]");
        List<String> list = new ArrayList<>();
        for (String s : split) {
            list.add(s);
        }
        return superSetPropertyVal(object, list, val);
    }

    /**
     * 超级属性赋值器
     *
     * @param object
     * @param list
     * @param val
     */
    public static Object superSetPropertyVal(Object object, List<String> list, String val) {
        Class<?> aClass = object.getClass();
        String s = list.get(0);
        String set = get_set(list.get(0), "set");
        String get = get_set(list.get(0), "get");
        try {
            Field declaredField = aClass.getDeclaredField(s);
            Class<?> type = declaredField.getType();
            Object objVal = aClass.getMethod(get).invoke(object);
            if (objVal == null) objVal = newObject(type);
            if (list.size() == 1) objVal = val;
            aClass.getMethod(set, type).invoke(object, objVal);
            if (list.size() > 1) {
                list.remove(0);
                superSetPropertyVal(objVal, list, val);
            }
            return object;
        } catch (Exception e) {

        }
        return object;
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值