>Java >java지도 시간 >Java Reflection을 기반으로 맵 자동 조립 JavaBean 툴 클래스 설계

Java Reflection을 기반으로 맵 자동 조립 JavaBean 툴 클래스 설계

php是最好的语言
php是最好的语言원래의
2018-08-08 11:37:311964검색

Myabtis를 사용할 때 일반적으로 단계는 대략 다음과 같이 맵을 사용할 필요가 없습니다.

public List<Role> findRoles(Map<String,Object> param);
<select id="dindRoles" parameterType="map" resultType="role">
    select id,role_name as roleName,note form t_role
    where role_name = #{roleName}
    and note = #{note}
</select>

//我们常常需要手打这些字段名
Map<String,Object> map = new HashMap<>();
map.put("roleName","xiaoming");
map.put("note","10");
List<Role> roles = roleMapper.findRoles(map);

그러나 입력해야 하는 필드가 많고 각 속성 이름이 매우 길면 매우 불편합니다. Java 리플렉션을 사용하여 지도를 자동으로 조합할 수 있습니다. 다음은 작성자의 구현입니다.

public class Test {
    //实现效果
    public static void main(String[] args) {
        HashMap<String, Object> map = new HashMap<>();
        Person person1 = new Person();
        person1.setAge(2);
        person1.setName("foonsu");
        //调用写好的mapBuild自动装配
        mapBuild(person1, map);
        //输出效果
        for (Map.Entry entry : map.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
    }
    public static void mapBuild(Object javaBean, Map map) {
        Class clazz = javaBean.getClass();
        //反射获取
        Field[] name = clazz.getDeclaredFields();
        for (Field field : name) {
            //将非null的javaBean属性值装配到map中
            if (getGetMethod(javaBean,field.getName())!=null)
                map.put(field.getName(), getGetMethod(javaBean,field.getName()));
        }
    }
    /**
     * 根据属性,获取get方法
     */
    public static Object getGetMethod(Object ob, String name) {
        Method[] m = ob.getClass().getMethods();
        try {
            for (int i = 0; i < m.length; i++) {
                if (("get" + name).toLowerCase().equals(m[i].getName().toLowerCase())) {
                    return m[i].invoke(ob);
                }
            }
        } catch (Exception e) {
        }
        return null;
    }
}
class Person{
    int age;
    String name;
    String personId;

    public String getPersonId() {
        return personId;
    }

    public void setPersonId(String personId) {
        this.personId = personId;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Ps: 이는 직접 순회 방법이며 시간 복잡도는 O(N^)입니다. 2) 예, 실제 생산에서는 JavaBean 속성의 설계가 그리 크지 않기 때문에 실제로 공간을 시간으로 교환한다는 아이디어를 사용하여 방법을 O(n)의 시간 복잡도로 최적화할 수도 있습니다. ).

관련 권장 사항:

java 반사 구현 javabean에서 json 예제 코드로

java 반사 반사 기본

위 내용은 Java Reflection을 기반으로 맵 자동 조립 JavaBean 툴 클래스 설계의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.