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();
}
}
}
第一次写博客 哪里不对的地方大家多批评
- java注解实现map与bean之间的转换
- 使用内省机制实现Map与Bean之间的转换
- java 使用BeanInfo实现bean实体与map之间的互相转换
- JAXB实现JAVA BEAN与XML之间的转换
- Java bean 与 Map的相互转换
- 利用Xstream注解实现xml和java bean之间的转换
- 利用Gson使json字符串与java bean/list/map之间的相互转换
- 利用Java的反射机制实现Bean实体与Map自动转换的工具类
- java 利用内省实现bean和map的转换
- Java中Bean与Map/Json/DBObject的相互转换
- JAXB 实现bean与xml之间的转换
- java--09--对象与JSON与Map之间的转换
- [分享]Java之Bean、Map、Json之间的互相转换工具类
- Java Map和Bean之前的转换
- Map 和 java Bean 的相互转换
- json 与 bean 之间的date转换
- json 与 bean 之间的date转换
- json 与 bean 之间的date转换
- 程序员的八个级别
- Android--快速地搜索手机文件引擎小程序(File I/O)
- ios开发之asihttprequest数据离线缓存与读取
- js 操作字符串
- MongoDB 副本集自动复制 Replica Set
- java注解实现map与bean之间的转换
- [IOS]SVPullToRefresh的使用
- Spring Test 整合 JUnit 4 使用总结
- 循环-01. 求整数段和(15)
- C++中的bitset的使用和简介
- Java图片高优化压缩
- C# 中的委托和事件
- ios 获取屏幕分辨率
- Android 4.4 音量调节流程分析