Heim >Java >javaLernprogramm >Entwurf einer JavaBean-Toolklasse zur automatischen Kartenassemblierung basierend auf Java-Reflexion

Entwurf einer JavaBean-Toolklasse zur automatischen Kartenassemblierung basierend auf Java-Reflexion

php是最好的语言
php是最好的语言Original
2018-08-08 11:37:311964Durchsuche

Wenn wir normalerweise Myabtis verwenden, müssen wir nicht oft Map zum Übergeben von Parametern verwenden. Die Schritte sind ungefähr wie folgt:

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);

Aber wenn Sie viele Felder eingeben müssen und jeder Attributname sehr lang ist, können Sie die Java-Reflektionsmethode verwenden, um die Karte automatisch zusammenzustellen:

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: Dies ist eine direkte Durchlaufmethode und die Zeitkomplexität beträgt O(N^2), da es in der tatsächlichen Produktion nicht viele Designs für ein JavaBean-Attribut geben wird , Raumersetzung kann auch verwendet werden Die Idee der Zeit optimiert die Methode auf eine Zeitkomplexität von O(n).

Verwandte Empfehlungen:

Java Reflection Implementation Javabean to JSON Beispielcode

Java Reflection Reflection Basics

Das obige ist der detaillierte Inhalt vonEntwurf einer JavaBean-Toolklasse zur automatischen Kartenassemblierung basierend auf Java-Reflexion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn