java通过反射获取类名、属性名称以及@Table注解上的表名称
2018-02-08 14:59
776 查看
import javax.persistence.Column; import javax.persistence.Id; import javax.persistence.Table; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * @author caizw * @createDate 2018/2/8 * @description 反射工具类 */ public class ReflectUtils { /** * 获取实体类主键 * * @param clazz * @return */ public static Field getIdField(Class<?> clazz) { Field[] fields = clazz.getDeclaredFields(); Field item = null; for (Field field : fields) { Id id = field.getAnnotation(Id.class); if (id != null) { field.setAccessible(true); item = field; break; } } if (item == null) { Class<?> superclass = clazz.getSuperclass(); if (superclass != null) { item = getIdField(superclass); } } return item; } /** * 根据主键名称获取实体类主键属性值 * * @param clazz * @param pkName * @return */ public static Object getPkValueByName(Object clazz, String pkName) { try { String firstLetter = pkName.substring(0, 1).toUpperCase(); String getter = "get" + firstLetter + pkName.substring(1); Method method = clazz.getClass().getMethod(getter, new Class[]{}); Object value = method.invoke(clazz, new Object[]{}); return value; } catch (Exception e) { return null; } } /** * 通过反射将 class1不为空的值赋值给class2 * * @param class1 * @param class2 * @throws Exception */ public static void reflectClass1ToClass2(Object class1, Object class2) throws Exception { Field[] field = class1.getClass().getDeclaredFields(); for (int i = 0; i < field.length; i++) { String name = field[i].getName(); if ("serialVersionUID".equals(name)) { continue; } name = name.substring(0, 1).toUpperCase() + name.substring(1); Method m1 = class1.getClass().getMethod("get" + name); Object value = m1.invoke(class1); if (value != null) { Field f = field[i]; f.setAccessible(true); f 4000 .set(class2, value); } } } /** * 获取实体类 @Column 的其中一个属性名称 * * @param clazz * @return */ public static Map<String, String> getColumnName(Class<?> clazz) { Map<String, String> map = new ConcurrentHashMap<>(); Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { if (field.isAnnotationPresent(Column.class)) { /** * 获取字段名 */ Column declaredAnnotation = field.getDeclaredAnnotation(Column.class); String column = declaredAnnotation.name(); map.put("fieldNames", field.getName()); map.put("column", column); break; } } return map; } /** * 通过获取类上的@Table注解获取表名称 * * @param clazz * @return */ public static Map<String, String> getTableName(Class<?> clazz) { Map<String, String> map = new ConcurrentHashMap<>(); Table annotation = clazz.getAnnotation(Table.class); String name = annotation.name(); String className = clazz.getSimpleName(); map.put("tableName", name); map.put("className", className); return map; } }
相关文章推荐
- 通过反射获取类中的属性,并且将类中的属性名称以及对应的值赋给另一个类中的对象
- 自己动手设计java web框架(二)-自定义注解以及通过反射获取注解
- java通过类的反射获取页面修改字段前后值以及字段名称
- java中的反射机制,以及如何通过反射获取一个类的构造方法 ,成员变量,方法,详细。。
- java进阶之反射:反射基础之如何获取一个类以及如何获取这个类的所有属性和方法(2)
- java 通过反射获取注解
- java 注解annotation的使用,以及反射如何获取注解
- java调用IP138获取本机IP以及通过IP地址获取区域名称
- Java通过反射获取到其类的属性和值
- Java反射之获取类的信息(类名,属性,方法,构造函数)
- java 通过反射获取调用类方法及属性
- Java反射代码--01.通过类名称加载一个类并且获取当前类实例
- java 注解annotation的使用,以及反射如何获取注解
- java利用反射获取对象类名以及对象属性名
- java 自定义注解annotation和通过反射获取注解
- java 注解annotation的使用,以及反射如何获取注解
- Java中用反射的方式获取类中的所有属性和方法,以及获取属性的默认值,设置属性的默认值
- 通过反射获取类属性字段 以及 调用类方法
- java 通过反射获取调用类方法及属性
- JAVA反射获取属性注解,类方法