Class DOInfoReader

java.lang.Object
com.pugwoo.dbhelper.utils.DOInfoReader

public class DOInfoReader extends Object
2015年1月12日 16:42:26 读取DO的注解信息: 1. 继承的类的信息读取,父类先读取,请保证@Column注解没有重复的字段。
  • Constructor Details

    • DOInfoReader

      public DOInfoReader()
  • Method Details

    • getTable

      public static Table getTable(Class<?> clazz) throws NoTableAnnotationException
      获取DO的@Table信息,如果子类没有,会往父类查找
      Throws:
      NoTableAnnotationException - 当clazz没有@Table注解时抛出NoTableAnnotationException
    • getJoinTable

      public static JoinTable getJoinTable(Class<?> clazz)
      获得clazz上注解的JoinTable,如果没有则返回null
      Returns:
      如果没有则返回null
    • isVirtualTable

      public static boolean isVirtualTable(Class<?> clazz)
      判断一个Table是否是虚拟表
    • getFieldByDBField

      public static List<DOInfoReader.RelatedField> getFieldByDBField(Class<?> clazz, String dbFieldName, Field relatedColumnField)
      从db字段名拿字段对象。
      新增支持@JoinTable的支持,可以获得JoinTable类中的对象的Field
      Parameters:
      clazz - DO类
      dbFieldName - 数据库字段名称,多个用逗号隔开;支持joinTable的字段,必须用别名表示,例如t1.id
      Returns:
      如果不存在返回空数组,返回的Field的顺序和dbFieldName保持一致;只要有一个dbFieldName找不到,则返回空数组
    • getGenericFieldType

      public static Class<?> getGenericFieldType(Field field)
      获得泛型的class
    • getColumns

      public static List<Field> getColumns(Class<?> clazz) throws NoColumnAnnotationException
      获得所有有@Column注解的列,包括继承的父类中的,顺序父类先
      Returns:
      不会返回null
      Throws:
      NoColumnAnnotationException - 当没有一个@Column注解时抛出
    • getColumnsForSelect

      public static List<Field> getColumnsForSelect(Class<?> clazz, boolean selectOnlyKey)
      获得所有有@Column注解的列,包括继承的父类中的,顺序父类先。 该方法只用于select读操作。
      Parameters:
      selectOnlyKey - 是否只select主键
      Returns:
      不会返回null
      Throws:
      NoColumnAnnotationException - 当没有一个@Column注解时抛出
    • getJoinLeftTable

      public static Field getJoinLeftTable(Class<?> clazz)
      获得注解了@JoinLeftTable的字段,如果没有注解,抛出NoJoinTableMemberException
    • getJoinRightTable

      public static Field getJoinRightTable(Class<?> clazz)
      获得注解了@JoinRightTable的字段,如果没有注解,抛出NoJoinTableMemberException
    • getKeyColumns

      public static List<Field> getKeyColumns(Class<?> clazz) throws NoKeyColumnAnnotationException
      获得字段里面的key字段
      Throws:
      NoKeyColumnAnnotationException - 如果没有key Column,抛出该异常。
    • getKeyColumnsNoThrowsException

      public static List<Field> getKeyColumnsNoThrowsException(Class<?> clazz)
      获得字段里面的key字段
    • getCasVersionColumn

      public static Field getCasVersionColumn(Class<?> clazz) throws CasVersionNotMatchException
      获得一个DO类注解的casVersion字段
      Returns:
      当没有column字段时返回null
      Throws:
      CasVersionNotMatchException - 当有2个及2个以上的casVersion字段时抛出该异常
    • getAutoIncrementField

      public static Field getAutoIncrementField(Class<?> clazz)
    • getSoftDeleteColumn

      public static Field getSoftDeleteColumn(Class<?> clazz)
      获得软删除标记字段,最多只能返回1个。
      Returns:
      如果没有则返回null
    • getNotKeyColumns

      public static List<Field> getNotKeyColumns(Class<?> clazz)
      获得字段里面的非key字段
    • getRelatedColumns

      public static List<Field> getRelatedColumns(Class<?> clazz)
      获得所有有@RelatedColumn注解的列,包括继承的父类中的,顺序父类先
      Returns:
      不会返回null
    • getValue

      public static Object getValue(Field field, Object object)
      优先通过getter获得值,如果没有getter,则直接获取
    • getValueForRelatedColumn

      public static Object getValueForRelatedColumn(List<DOInfoReader.RelatedField> fields, Object object)
      为relatedColumn获得字段的值。这里有特别的逻辑。 当fields只有一个时,返回的是对象本身;否则是一个List,里面是按顺序的fields的多个值
      Returns:
      当fields为空,返回null
    • setValue

      public static void setValue(Field field, Object object, Object value)
      先按照setter的约定寻找setter方法(必须严格匹配参数类型或自动转换)
      如果有则按setter方法,如果没有则直接写入
      如果写入失败,会log error但不会抛出异常。