java注解实现map与bean之间的转换

来源:互联网 发布:如何做淘宝客服兼职 编辑:程序博客网 时间:2024/06/10 03:17

  最近敲代码时有一个map与bean之间的转换功能,操作比较烦 就考虑写util方法。但是map里的key跟bean的属性名称是不一样的(很简单的思维,如果我想map转bean 必须让他知道map的那个key对应bean里的哪个字段),不能用现成的jar包,所以就考虑到用注解@interface实现。废话不多说 上代码

首先注解

package com.ebang.annotation;

//运行时在jvm中读取
@Retention(RetentionPolicy.RUNTIME)
//只注解field(注解到其他地方报错) (当然也可以注解方法啥的 修改ElementType就行 类型很多可以看下文档)
@Target(ElementType.FIELD)
public @interface Sql {


String value();


}

然后类中的应用方式 随便找了一个

/**
 * 
 */
package com.ebang.model;


import com.ebang.annotation.Sql;


/**
 * 角色表
 * @author wangmingzhen
 *
 */
public class SysRole {
@Sql("sr_id")
private String srId;//主键
@Sql("role_name")
private String roleName;//角色名称
@Sql("status")
private int status;//状态
@Sql("data_valid")
private int dataValid;//数据有效性 0 可用 1 不可用
@Sql("role_type")
private int roleType;//角色类型
public String getSrId() {
return srId;
}
public void setSrId(String srId) {
this.srId = srId;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public int getDataValid() {
return dataValid;
}
public void setDataValid(int dataValid) {
this.dataValid = dataValid;
}
public int getRoleType() {
return roleType;
}
public void setRoleType(int roleType) {
this.roleType = roleType;
}



}

util类代码

/**
 * 
 */
package com.ebang.util;


import java.lang.reflect.Field;
import java.util.Map;


import com.ebang.annotation.Sql;


/**
 * @author wangmingzhen
 *
 */
public final class BeanUtil {
public static <T> Object fromMapToBean(Class<T> clazz,Map<String,Object> map){
try {
// 获取类属性
       Object obj = clazz.newInstance(); // 创建 对象
       //变量该对象的字段  
       for (Field field : clazz.getDeclaredFields()) {  
        field.setAccessible(true);
         
           Sql sql = field.getAnnotation(Sql.class);  
           //如果@Sql注解不空,即方法有@Sql注解  
           if (sql != null) {  
                
               //这里可以从注解中获取值
               String name = sql.value(); 
               if (map.containsKey(name)) {
               
                   Object value = map.get(name);


                   Object[] args = new Object[1];
                   args[0] = value;

//写入obj
                   field.set(obj, value);
                  
                 
               }
           
           }  
             
       }  
       return obj;


 
} catch (Exception e) {
e.printStackTrace();
}
return null; 

}


/**
* @param args
* @throws IntrospectionException 
*/
/*public static void main(String[] args) throws IntrospectionException {
try {


BeanUtil parse = new BeanUtil();  
Map<String, Object> map=new HashMap<String,Object>();
map.put("sm_id", "1");
map.put("menu_path", "2");
// SysMenu sm=(SysMenu) parse.fromMapToBean(SysMenu.class, map);
         
   
//System.out.println(sm.getSmId());
  
} catch (Exception e) {
e.printStackTrace();
}


}





}

第一次写博客 哪里不对的地方大家多批评

0 0