目录
- 前言
- 获取表名
- 获取表字段
- 获取表字段并且以object类返回
前言
市面上找了一下能够获取表名和表字段的方法,最后结果不是很理想,于是自己写一套
获取表名
//获取表名
public static String getTableName(Object object) {
Field[] fields = object.getClass().getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
// 获取表名
TableName table = object.getClass().getAnnotation(TableName.class);
if (table != null) {
return table.value();
}
}
return null;
}
测试:
System.out.println(getTableName(new Model()));
注意点:这里需要用到mybatisPlus的依赖,并且需要在类上加上@TableName(“ms_model”)的注解
获取表字段
/**
* 获取表的所有表字段
* @return
*/
public static List<String> getStringFieldList(Object obj) {
Field[] fields = obj.getClass().getDeclaredFields();
List<String> list = new ArrayList<>();
for (Field field : fields) {
//设置是否允许访问,不是修改原来的访问权限修饰词。
// field.setAccessible(true);
//获取字段名,和字段的值
String fieldName = field.getName();
list.add(fieldName);
}
return list;
}
测试:
List<String> stringFieldList = getStringFieldList(new Model());
System.out.println(stringFieldList);
结果:
这边需要注意的是如果实体类里有这个序列UID的话,在输出的时候这个也会变成一个字段
获取表字段并且以object类返回
最后加一个以obj类型返回的方法,这样既可以获取数据库字段又可以返回实体类字段了
/**
* 获取表的所有表字段
* @param obj 对象
* @return
*/
public static Object getObjectField(Object obj) {
Field[] fields = obj.getClass().getDeclaredFields();
Map<String, Object> map = new HashMap<>();
for (Field field : fields) {
//设置是否允许访问,不是修改原来的访问权限修饰词。
field.setAccessible(true);
//获取字段名,和字段的值
String fieldName = field.getName();
map.put(fieldName, underlineByHump(fieldName));
}
//再将map转为Obj类
return JSON.parseObject(JSON.toJSONString(map), Object.class);
public static Pattern compile = Pattern.compile("[A-Z]");
/**
* @author Howe
* @Description 将驼峰转为下划线,正则式
* @param str 例如:helloWord
* @return java.lang.String
* underline:下划线,驼峰:hump
*/
public static String underlineByHump(String str) {
Matcher matcher = compile.matcher(str);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
matcher.appendReplacement(sb, "_" + matcher.group(0).toLowerCase());
}
matcher.appendTail(sb);
return sb.toString();
}
测试:
Object objectField = getObjectField(new Model());
System.out.println(objectField);
在代码中转化成需要的实体类
ModelVo field = new ObjectMapper().convertValue(TableUtil.getObjectField(new ModelVo()), ModelVo.class);