首页 > 开发 > Java > 正文

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

2024-07-14 08:42:34
字体:
来源:转载
供稿:网友

前言

JavaBean是一个特殊的java类,本文将给大家详细介绍关于基于Java反射的map自动装配JavaBean工具类设计的相关内容,下面话不多说了,来一起看看详细的介绍吧

方法如下

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

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

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

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)的时间复杂度。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对VeVb武林网的支持。


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表