获取映射注解,查询数据库字段的信息
//通过循环 可以获得 注解中的name值@Column(name="EO_XXX"),本方法获取的是 get方法的注解
Method[] methods= EoOrderMaterielModel.class.getMethods();
Map<String,String> modelColumns=new HashMap<String, String>();
for(Method m:methods){
Annotation ats[]=m.getAnnotations();
if(ats!=null&&ats.length>0){
if(ats[0] instanceof Column){
Column colInt = (Column) ats[0];
String columnName = colInt.name();
String value=lowerKey(m.toGenericString().substring(m.toGenericString().lastIndexOf(".")+4, m.toGenericString().length()-2));
modelColumns.put(columnName,value);
}
}
}
//获取private int id的注解
Field field = EoOrderMaterielModel.class.getDeclaredField(modelColumns.get(validators[j]));
field.setAccessible(true);
Annotation ats[]=field.getAnnotations();
if(ats!=null&&ats.length>0){
if(ats[0] instanceof Column){
Column colInt = (Column) ats[0];
String columnName = colInt.name();
}
}
//实体类 实例
@Table(name = "T_EO_ORDER")
public class EoOrderMaterielModel{
@Column(name = "EO_ID")
private int id;
@Column(name = "EO_ID")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id= id;
}
}
//获取表名 @Table(name="T_EO_ORDER")
Table table = EoOrderMaterielModel.class.getAnnotation(Table.class);
// 通过字段值和表名 可以查询其备注信息(数据库中的注释信息)
String sqlColumn=" ";
for(String name:columnName){
sqlColumn+=" ‘ "+name+" ‘, ";
}
return "SELECT a1.column_name AS name," +
"CASE"+
" WHEN a2.comments IS NULL THEN ‘未知‘ "+
" ELSE a2.comments "+
" END AS comments "+
" FROM USER_TAB_COLUMNS a1 "+
" LEFT JOIN USER_COL_COMMENTS a2 "+
" ON a1.table_name = a2.table_name "+
" AND a1.column_name = a2.column_name "+
" WHERE a1.table_name = upper(‘ "+
tableName+
" ‘ ) and a1.column_name in("+
sqlColumn.substring(0, sqlColumn.length()-1)+
")";