Maison >Java >javaDidacticiel >Conception d'une classe d'outils JavaBean d'assemblage automatique de cartes basée sur la réflexion Java
Lorsque nous utilisons habituellement Myabtis, nous n'avons pas souvent besoin d'utiliser map pour transmettre des paramètres :
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);
Mais si de nombreux champs doivent être saisis et que chaque nom d'attribut est très long, ce sera inconfortable. Ici, vous pouvez utiliser la réflexion Java pour assembler automatiquement la carte :
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 : Il s'agit d'une méthode de traversée directe, et la complexité temporelle est O(N^2), car dans la production réelle, il n'y aura pas beaucoup de conceptions pour un Attribut JavaBean. En fait, ce n'est pas le cas. L'idée d'échanger de l'espace contre du temps peut être utilisée pour optimiser la méthode à une complexité temporelle de O(n). Recommandations associées :
implémentation de la réflexion Java, exemple de code Javabean vers JSON
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!