private static final Log log = LogFactory.getLog(JPASupport.class);
private static final long serialVersionUID = 1L;
/*
* 用于存放POJO的列信息
*/
private transient static Map<Class<? extends JPASupport>, List<String>> columnMap = new HashMap<Class<? extends JPASupport>, List<String>>();
/**
* 获取POJO对应的表名
* 需要POJO中的属性定义 @Table(name)
*
* @return String
*/
public String tableName()
{
log.debug("loading JAPSupport method tableName..");
Table table = this.getClass().getAnnotation(Table.class);
if (null != table)
{
return table.name();
}
else
{
throw new RuntimeException("undefine POJO @Table, need Tablename(@Table)..");
}
}
/**
* 获取POJO对应的主键名称
* 需要POJO中的属性定义 @Id
*
* @return String
*/
public String id()
{
log.debug("loading JAPSupport method id..");
log.debug(this.getClass().getName());
for (Field field : this.getClass().getDeclaredFields())
{
if (field.isAnnotationPresent(Id.class))
{
return field.getName();
}
}
throw new RuntimeException("undefine POJO @Id..");
}
/**
* 用于计算类定义
* 需要POJO中的属性定义 @Column(name)
*/
public void caculationColumnList()
{
if (columnMap.containsKey(this.getClass()))
{
return;
}
Field[] fields = this.getClass().getDeclaredFields();
List<String> columnList = new ArrayList<String>(fields.length);
for (Field field : fields)
{
if (field.isAnnotationPresent(Column.class))
{
columnList.add(field.getName());
}
}
columnMap.put(this.getClass(), columnList);
}
/**
* 获取用于WHERE的 有值字段表
* @return List
*/
public List<WhereColumn> returnWhereColumnsName()
{
Field[] fields = this.getClass().getDeclaredFields();
List<WhereColumn> columnList = new ArrayList<WhereColumn>(fields.length);
for (Field field : fields)
{
if (field.isAnnotationPresent(Column.class) && !isNull(field))
{
columnList.add(new WhereColumn(field.getName(),field.getGenericType().equals(String.class)));
}
}
return columnList;
}
/**
* Where条件信息
*/
public class WhereColumn
{
public String name;
public boolean isString;
public WhereColumn(String name, boolean isString)
{
this.name = name;
this.isString = isString;
}
}
/**
* 用于获取Insert的字段累加
* @return String
*/
public String returnInsertColumnsName()
{
StringBuilder sb = new StringBuilder();
List<String> list = columnMap.get(this.getClass());
int i = 0;
for (String column : list)
{
if (isNull(column))
{
continue;
}
if (i++ != 0)
{
sb.append(',');
}
sb.append(column);
}
return sb.toString();
}
JPA反射机制实现对象获取-1
猜你喜欢
转载自mickey-hou.iteye.com/blog/1654638
今日推荐
周排行