Rumah Java javaTutorial 基于Java反射的map自动装配JavaBean工具类设计

基于Java反射的map自动装配JavaBean工具类设计

Aug 08, 2018 am 11:37 AM
java

我们平时在用Myabtis时不是常常需要用map来传递参数,大体是如下的步骤:

1

2

3

4

5

6

7

8

9

10

11

12

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

Salin selepas log masuk

但如果需要put的字段很多,而且每个属性名都很长的时候,那就很难受了,这里可以采用Java反射的方法去自动装配map,以下是作者的实现:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

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;

    }

}

Salin selepas log masuk

Ps:在这是直接采遍历的方法,时间复杂度是O(N^2)的,因为在实际生产中一个JavaBean属性的设计也不会非常多,其实也可以采用空间换时间的思想将方法优化到O(n)的时间复杂度。

相关推荐:

java反射实现javabean转json实例代码

java反射 之 反射基础

Atas ialah kandungan terperinci 基于Java反射的map自动装配JavaBean工具类设计. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Akar Kuasa Dua di Jawa Akar Kuasa Dua di Jawa Aug 30, 2024 pm 04:26 PM

Akar Kuasa Dua di Jawa

Nombor Sempurna di Jawa Nombor Sempurna di Jawa Aug 30, 2024 pm 04:28 PM

Nombor Sempurna di Jawa

Penjana Nombor Rawak di Jawa Penjana Nombor Rawak di Jawa Aug 30, 2024 pm 04:27 PM

Penjana Nombor Rawak di Jawa

Nombor Armstrong di Jawa Nombor Armstrong di Jawa Aug 30, 2024 pm 04:26 PM

Nombor Armstrong di Jawa

Weka di Jawa Weka di Jawa Aug 30, 2024 pm 04:28 PM

Weka di Jawa

Nombor Smith di Jawa Nombor Smith di Jawa Aug 30, 2024 pm 04:28 PM

Nombor Smith di Jawa

Soalan Temuduga Java Spring Soalan Temuduga Java Spring Aug 30, 2024 pm 04:29 PM

Soalan Temuduga Java Spring

Cuti atau kembali dari Java 8 Stream Foreach? Cuti atau kembali dari Java 8 Stream Foreach? Feb 07, 2025 pm 12:09 PM

Cuti atau kembali dari Java 8 Stream Foreach?

See all articles