Annotation Type Column


@Target(FIELD) @Retention(RUNTIME) public @interface Column
2015年1月12日 16:34:32 数据表列的信息
  • Required Element Summary

    Required Elements
    Modifier and Type
    Required Element
    Description
    列名
  • Optional Element Summary

    Optional Elements
    Modifier and Type
    Optional Element
    Description
    int
    是否自动去除字符串字段两端的空白,仅对String类型有效。该设置的优先级高于Table注解的autoTrimString属性。
    值为1表示自动去除两端空白,值为0表示不去除,值为-1不设置,如果Table的autoTrimString属性也为-1时,不自动去除
    boolean
    乐观锁,当字段为乐观锁时,它必须是Integer或Long类型,默认初始值为1, 当乐观锁失败时抛出CasVersionNotMatchException。 该特性仅对update和updateCustom方法生效,对updateAll不生效。 限制一个DO类最多只能有一个casVersion字段。 新增和更新会自动设置该字段的值,因此不需要在数据库和程序中手动去修改该值。
    列注释
    计算列。注意:计算列的别名为value属性的值,不需要再写上as 别名。
    当设置了非空字符串时,在对象删除数据之前,会自动执行该mvel脚本获得值,并把值设置到DO中,再写入数据库(软删除时)。
    说明:无论是否是软删除,该脚本都会被执行。
    【特别注意】对于delete(Class clazz, String postSql, Object...
    boolean
    当查询、新增、修改、删除的mvel脚本执行出错时,是否忽略该错误,默认忽略并返回null。 如果设置为不忽略,则会在脚本执行出错时,抛出异常ScriptErrorException。
    insertValueScript脚本的执行条件,默认为null,表示只有当原值为null时才执行脚本
    当设置了非空字符串时,在对象插入数据库之前,会自动执行该mvel脚本获得值,并把值设置到DO中,再插入数据库。
    mvel脚本中,可以通过t标识获取当前插入的对象。
    从1.2版本起,仅当原值是null时,才自动执行脚本并设置脚本返回的值。
    boolean
    主键是否自增
    boolean
    标记该列是否转成json字符串存入数据库,此时数据库列的类型必须可以存放字符串
    boolean
    是否主键
    int
    写入到数据库的最大字符串长度(字符数,不是字节数)
    当字段的值的字符串长度超过设置的值时,将自动截取前maxStringLength个字符。
    说明:如果值为负数表示不限制。该限制只对String类型生效,其它类型不生效。特别的,当值为0时,字符串将截断成空字符串。
    注意:在mysql中,varchar的长度是字符数,而text/mediumtext/longtext的长度是字节(不是字符),因此当使用的是text时,请注意估算字符的最大长度
    设置当字段从数据库读取的值为null时,设置为该脚本返回的值
    boolean
    插入时,当字段值未提供时,设置是否自动生成随机32字符,此时字段必须是String类型。
    这个功能用于随机生成主键。
    boolean
    当设置为true时,会自动设置当前日期时间
    对应的类型必须是以下其中一种,对应精度约定如下:
    java.util.Date 精度:秒
    java.sql.Date 精度:秒
    java.sql.Timestamp 精度:毫秒
    java.sql.Time 精度:秒
    java.time.LocalDateTime 精度:秒
    java.time.LocalDate 精度:天
    java.time.LocalTime 精度:秒
    java.util.Calendar 精度:秒
    java.time.Instant 精度:秒
    java.time.ZonedDateTime 精度:秒
    boolean
    当设置为true时,且原值为null时,更新时会自动设置当前日期时间,对应的类型必须是以下其中一种,对应精度约定如下:
    java.util.Date 精度:秒
    java.sql.Date 精度:秒
    java.sql.Timestamp 精度:毫秒
    java.sql.Time 精度:秒
    java.time.LocalDateTime 精度:秒
    java.time.LocalDate 精度:天
    java.time.LocalTime 精度:秒
    java.util.Calendar 精度:秒
    java.time.Instant 精度:秒
    java.time.ZonedDateTime 精度:秒
    boolean
    当设置为true时,无论改值是不是null都会更新时会自动设置当前日期时间, (这是因为,从数据库全量查出来的updateTime是有值的,只能强制设置Date)
    特别的,软删除时,会设置该值为删除时的时间。
    对应的类型必须是以下其中一种,对应精度约定如下:
    java.util.Date 精度:秒
    java.sql.Date 精度:秒
    java.sql.Timestamp 精度:毫秒
    java.sql.Time 精度:秒
    java.time.LocalDateTime 精度:秒
    java.time.LocalDate 精度:天
    java.time.LocalTime 精度:秒
    java.util.Calendar 精度:秒
    java.time.Instant 精度:秒
    java.time.ZonedDateTime 精度:秒
    软删除标记,如果注解了该数据,则对应的字段为软删除标记。
    这里【必须】提供一个数组,包含两个值,第一个值是未删除标记,第二个值是已删除标记。

    一般软删除字段是数组,所以softDelete的值会直接设置到sql中。
    如果这个字段是字符串,请这样写:softDelete = {"'NO'", "'YES'"}
    这样设计的目的,是支持软删除使用其它列名的值,和字符串区分
    特别的,softDelete的第二个参数写为列名称时,可以在软删除时设置为该列的值

    【错误的个数(不是两个)和空的String值将认为是无效的标记而失效。】

    每个DO最多有一个softDelete字段表示软删除。可以不用软删除。

    使用示例:
    \@Column(value = "deleted", softDelete = {"0", "1"}) private Boolean deleted;
    当设置了非空字符串时,在对象更新数据库之前,会自动执行该mvel脚本获得值,并把值设置到DO中,再插入数据库。
    mvel脚本中,可以通过t标识获取当前插入的对象
    【特别注意】由于是更新,因此无论原值是否为null,该脚本都会执行并设置脚本返回的值。
    【特别注意】对于updateAll方法,mvel脚本无法获得该变量t
    说明:该脚本对于updateCustom和updateAll也是生效的。
    说明:如果脚本的返回值为null,则等价于不设置值(不支持通过该脚本将数据库的值设置为null)。 【特别注意】对于updateCustom和updateAll方法,要求脚本返回的对象toString之后,数据库可以识别
  • Element Details

    • value

      String value
      列名
    • comment

      String comment
      列注释
      Default:
      ""
    • isJSON

      boolean isJSON
      标记该列是否转成json字符串存入数据库,此时数据库列的类型必须可以存放字符串
      Default:
      false
    • computed

      String computed
      计算列。注意:计算列的别名为value属性的值,不需要再写上as 别名。
      Default:
      ""
    • isKey

      boolean isKey
      是否主键
      Default:
      false
    • isAutoIncrement

      boolean isAutoIncrement
      主键是否自增
      Default:
      false
    • maxStringLength

      int maxStringLength
      写入到数据库的最大字符串长度(字符数,不是字节数)
      当字段的值的字符串长度超过设置的值时,将自动截取前maxStringLength个字符。
      说明:如果值为负数表示不限制。该限制只对String类型生效,其它类型不生效。特别的,当值为0时,字符串将截断成空字符串。
      注意:在mysql中,varchar的长度是字符数,而text/mediumtext/longtext的长度是字节(不是字符),因此当使用的是text时,请注意估算字符的最大长度
      Default:
      -1
    • autoTrimString

      int autoTrimString
      是否自动去除字符串字段两端的空白,仅对String类型有效。该设置的优先级高于Table注解的autoTrimString属性。
      值为1表示自动去除两端空白,值为0表示不去除,值为-1不设置,如果Table的autoTrimString属性也为-1时,不自动去除
      Default:
      -1
    • setRandomStringWhenInsert

      boolean setRandomStringWhenInsert
      插入时,当字段值未提供时,设置是否自动生成随机32字符,此时字段必须是String类型。
      这个功能用于随机生成主键。
      Default:
      false
    • softDelete

      String[] softDelete
      软删除标记,如果注解了该数据,则对应的字段为软删除标记。
      这里【必须】提供一个数组,包含两个值,第一个值是未删除标记,第二个值是已删除标记。

      一般软删除字段是数组,所以softDelete的值会直接设置到sql中。
      如果这个字段是字符串,请这样写:softDelete = {"'NO'", "'YES'"}
      这样设计的目的,是支持软删除使用其它列名的值,和字符串区分
      特别的,softDelete的第二个参数写为列名称时,可以在软删除时设置为该列的值

      【错误的个数(不是两个)和空的String值将认为是无效的标记而失效。】

      每个DO最多有一个softDelete字段表示软删除。可以不用软删除。

      使用示例:
      \@Column(value = "deleted", softDelete = {"0", "1"}) private Boolean deleted;
      Default:
      {""}
    • setTimeWhenInsert

      boolean setTimeWhenInsert
      当设置为true时,且原值为null时,更新时会自动设置当前日期时间,对应的类型必须是以下其中一种,对应精度约定如下:
      java.util.Date 精度:秒
      java.sql.Date 精度:秒
      java.sql.Timestamp 精度:毫秒
      java.sql.Time 精度:秒
      java.time.LocalDateTime 精度:秒
      java.time.LocalDate 精度:天
      java.time.LocalTime 精度:秒
      java.util.Calendar 精度:秒
      java.time.Instant 精度:秒
      java.time.ZonedDateTime 精度:秒
      Default:
      false
    • setTimeWhenUpdate

      boolean setTimeWhenUpdate
      当设置为true时,无论改值是不是null都会更新时会自动设置当前日期时间, (这是因为,从数据库全量查出来的updateTime是有值的,只能强制设置Date)
      特别的,软删除时,会设置该值为删除时的时间。
      对应的类型必须是以下其中一种,对应精度约定如下:
      java.util.Date 精度:秒
      java.sql.Date 精度:秒
      java.sql.Timestamp 精度:毫秒
      java.sql.Time 精度:秒
      java.time.LocalDateTime 精度:秒
      java.time.LocalDate 精度:天
      java.time.LocalTime 精度:秒
      java.util.Calendar 精度:秒
      java.time.Instant 精度:秒
      java.time.ZonedDateTime 精度:秒
      Default:
      false
    • setTimeWhenDelete

      boolean setTimeWhenDelete
      当设置为true时,会自动设置当前日期时间
      对应的类型必须是以下其中一种,对应精度约定如下:
      java.util.Date 精度:秒
      java.sql.Date 精度:秒
      java.sql.Timestamp 精度:毫秒
      java.sql.Time 精度:秒
      java.time.LocalDateTime 精度:秒
      java.time.LocalDate 精度:天
      java.time.LocalTime 精度:秒
      java.util.Calendar 精度:秒
      java.time.Instant 精度:秒
      java.time.ZonedDateTime 精度:秒
      Default:
      false
    • readIfNullScript

      String readIfNullScript
      设置当字段从数据库读取的值为null时,设置为该脚本返回的值
      Default:
      ""
    • insertValueScript

      String insertValueScript
      当设置了非空字符串时,在对象插入数据库之前,会自动执行该mvel脚本获得值,并把值设置到DO中,再插入数据库。
      mvel脚本中,可以通过t标识获取当前插入的对象。
      从1.2版本起,仅当原值是null时,才自动执行脚本并设置脚本返回的值。
      Default:
      ""
    • insertValueCondition

      ValueConditionEnum insertValueCondition
      insertValueScript脚本的执行条件,默认为null,表示只有当原值为null时才执行脚本
      Default:
      WHEN_NULL
    • updateValueScript

      String updateValueScript
      当设置了非空字符串时,在对象更新数据库之前,会自动执行该mvel脚本获得值,并把值设置到DO中,再插入数据库。
      mvel脚本中,可以通过t标识获取当前插入的对象
      【特别注意】由于是更新,因此无论原值是否为null,该脚本都会执行并设置脚本返回的值。
      【特别注意】对于updateAll方法,mvel脚本无法获得该变量t
      说明:该脚本对于updateCustom和updateAll也是生效的。
      说明:如果脚本的返回值为null,则等价于不设置值(不支持通过该脚本将数据库的值设置为null)。 【特别注意】对于updateCustom和updateAll方法,要求脚本返回的对象toString之后,数据库可以识别
      Default:
      ""
    • deleteValueScript

      String deleteValueScript
      当设置了非空字符串时,在对象删除数据之前,会自动执行该mvel脚本获得值,并把值设置到DO中,再写入数据库(软删除时)。
      说明:无论是否是软删除,该脚本都会被执行。
      【特别注意】对于delete(Class clazz, String postSql, Object... args)方法,有使用该脚本的DO类将使用逐个删除的方式进行删除,此时性能可能比较慢,对于快速批量删除的场景,请勿使用deleteValueScript脚本。
      Default:
      ""
    • ignoreScriptError

      boolean ignoreScriptError
      当查询、新增、修改、删除的mvel脚本执行出错时,是否忽略该错误,默认忽略并返回null。 如果设置为不忽略,则会在脚本执行出错时,抛出异常ScriptErrorException。
      Default:
      true
    • casVersion

      boolean casVersion
      乐观锁,当字段为乐观锁时,它必须是Integer或Long类型,默认初始值为1, 当乐观锁失败时抛出CasVersionNotMatchException。 该特性仅对update和updateCustom方法生效,对updateAll不生效。 限制一个DO类最多只能有一个casVersion字段。 新增和更新会自动设置该字段的值,因此不需要在数据库和程序中手动去修改该值。
      Default:
      false